{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 2. 计算物理基础 "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.1 离散化"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "通常我们的物理背景是放在连续的时空之上，而当我们采用数值方式来求解问题时，第一步就是要将一些连续的量变成离散的数，即问题的离散化。\n",
    "\n",
    "离散化不仅仅是一种处理手段，也包含深刻的物理思想。例如物理系统常常具有多尺度特性，离散化需要处理不同尺度的相互作用。在离散化过程中，我们需要考虑不同物理量的尺度，并选择适当的离散化步长。例如，在模拟大气流动时，我们需要选择合适的时间步长和空间网格，以捕捉不同尺度的流动特性。此外，在一些复杂系统中，单一尺度的离散化方法可能不够，需要多尺度方法来处理。例如，多重网格法和多尺度有限元法可以在不同尺度上进行离散化和求解。此外，离散化思想与物理学中的重整化群思想也有深刻的联系。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 2.1.1 积分"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "积分是物理上常见的操作。积分的数值计算则充分体现了离散化的处理方式。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### 一维积分"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "假定我们希望计算积分\n",
    "$$\n",
    "I=\\int_{a}^{b}f(x)dx.\n",
    "$$\n",
    "通常的做法是将有限的区间$[a,b]$等分为$N$份，每一份的长度为$h=(b-a)/N$。我们令，\n",
    "$$\n",
    "x_{0}\\equiv a,x_{1}=x_{0}+h,\\cdots,x_{N}=x_{0}+Nh=b\n",
    "$$\n",
    "计算各个点的函数值， $f(x_{i})=f_{i},i=0,1,...,N$。那么我们可以构造最基本的所谓梯形法则来近似函数的积分，$I\\approx h\\left[\\frac{1}{2}f_{0}+f_{1}+\\cdots+f_{N-1}+\\frac{1}{2}f_{N}\\right]$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* 例题计算如下积分\n",
    "$$\n",
    "J(m, n)=\\int_0^{\\pi / 2} \\cos ^m \\theta \\sin ^n \\theta d \\theta .\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.2497499485443526\n",
      "(0.24999999999999997, 2.775557561562891e-15)\n"
     ]
    }
   ],
   "source": [
    "from scipy.integrate import quad\n",
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "def f(x,m,n):\n",
    "    return (np.cos(x)**m) * (np.sin(x)**n)\n",
    "def integral1d(f,a,b,m,n,eps=0.1):\n",
    "    k = 1000\n",
    "    h = (b - a )/k \n",
    "    #x = np.arange(a,b+h,h)\n",
    "    x = np.linspace(a,b,k)\n",
    "    y = f(x,m,n)\n",
    "    return ((y[0] + y[-1])/2 + np.sum(y[1:-1]))*h\n",
    "\n",
    "print(integral1d(f,0,np.pi/4,1,1))\n",
    "print(quad(f,0,np.pi/4,args=(1,1)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "辛普森法\n",
    "\n",
    "辛普森法利用二次抛物线来近似函数，在许多情况下比梯形法更精确。\n",
    "\n",
    "步骤：\n",
    "1. 划分区间：将积分区间 [a, b] 分成 n 个等宽的小区间（n 必须是偶数），每个区间的宽度为 Δx = (b - a) / n。\n",
    "2. 计算抛物线面积：每两个小区间形成一个二次抛物线，其面积可以通过辛普森公式计算。\n",
    "3. 求和：将所有抛物线的面积相加，得到积分的近似值。\n",
    "\n",
    "公式：\n",
    "$$ \\int_a^b f(x) , dx \\approx \\frac{\\Delta x}{3} \\left[ f(x_0) + 4 \\sum_{\\text{odd } i} f(x_i) + 2 \\sum_{\\text{even } i} f(x_i) + f(x_n) \\right] $$ "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以从不同角度来理解这些数值算法\n",
    "\n",
    "1. 几何角度\n",
    "从几何角度来看，数值积分方法可以看作是在曲线下方构造几何形状（如矩形、梯形或抛物线）来近似求解面积。\n",
    "\n",
    "矩形法：将积分区间分成若干小区间，每个小区间用一个矩形来近似。矩形的高度是函数在区间端点（左端点或右端点）的值。\n",
    "\n",
    "梯形法：用梯形来近似每个小区间的面积，梯形的两条平行边分别是函数在区间两端点的值，高度是区间的宽度。\n",
    "\n",
    "辛普森法：用抛物线（即二次多项式）来近似每两个小区间的面积，通过拟合三个点（区间的两个端点和中点）来构造抛物线。\n",
    "\n",
    "2. 代数角度\n",
    "从代数角度来看，数值积分方法可以理解为通过多项式插值或线性插值来近似函数。\n",
    "\n",
    "矩形法：可以看作是零次多项式插值，即在每个小区间内用一个常数（函数值）来近似。\n",
    "\n",
    "梯形法：可以看作是一次多项式插值，即在每个小区间内用一条直线来近似。\n",
    "\n",
    "辛普森法：可以看作是二次多项式插值，即在每两个小区间内用一条抛物线来近似。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "左矩形法积分结果: 1.9835235375094544\n",
      "右矩形法积分结果: 1.9835235375094544\n",
      "梯形法积分结果: 1.9835235375094542\n",
      "辛普森法积分结果: 2.0001095173150043\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/guilongcheng/opt/anaconda3/lib/python3.9/site-packages/IPython/core/pylabtools.py:151: UserWarning: Glyph 25968 (\\N{CJK UNIFIED IDEOGRAPH-6570}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "/Users/guilongcheng/opt/anaconda3/lib/python3.9/site-packages/IPython/core/pylabtools.py:151: UserWarning: Glyph 20540 (\\N{CJK UNIFIED IDEOGRAPH-503C}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "/Users/guilongcheng/opt/anaconda3/lib/python3.9/site-packages/IPython/core/pylabtools.py:151: UserWarning: Glyph 31215 (\\N{CJK UNIFIED IDEOGRAPH-79EF}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "/Users/guilongcheng/opt/anaconda3/lib/python3.9/site-packages/IPython/core/pylabtools.py:151: UserWarning: Glyph 20998 (\\N{CJK UNIFIED IDEOGRAPH-5206}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "/Users/guilongcheng/opt/anaconda3/lib/python3.9/site-packages/IPython/core/pylabtools.py:151: UserWarning: Glyph 26041 (\\N{CJK UNIFIED IDEOGRAPH-65B9}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "/Users/guilongcheng/opt/anaconda3/lib/python3.9/site-packages/IPython/core/pylabtools.py:151: UserWarning: Glyph 27861 (\\N{CJK UNIFIED IDEOGRAPH-6CD5}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "/Users/guilongcheng/opt/anaconda3/lib/python3.9/site-packages/IPython/core/pylabtools.py:151: UserWarning: Glyph 28436 (\\N{CJK UNIFIED IDEOGRAPH-6F14}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "/Users/guilongcheng/opt/anaconda3/lib/python3.9/site-packages/IPython/core/pylabtools.py:151: UserWarning: Glyph 31034 (\\N{CJK UNIFIED IDEOGRAPH-793A}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "/Users/guilongcheng/opt/anaconda3/lib/python3.9/site-packages/IPython/core/pylabtools.py:151: UserWarning: Glyph 24038 (\\N{CJK UNIFIED IDEOGRAPH-5DE6}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "/Users/guilongcheng/opt/anaconda3/lib/python3.9/site-packages/IPython/core/pylabtools.py:151: UserWarning: Glyph 30697 (\\N{CJK UNIFIED IDEOGRAPH-77E9}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "/Users/guilongcheng/opt/anaconda3/lib/python3.9/site-packages/IPython/core/pylabtools.py:151: UserWarning: Glyph 24418 (\\N{CJK UNIFIED IDEOGRAPH-5F62}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "/Users/guilongcheng/opt/anaconda3/lib/python3.9/site-packages/IPython/core/pylabtools.py:151: UserWarning: Glyph 21491 (\\N{CJK UNIFIED IDEOGRAPH-53F3}) missing from current font.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAtAAAAHwCAYAAACPE1g3AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAABq1UlEQVR4nO3dd3wUdeLG8c93Szab7KYXmnRQrCAgUqR3kGJBPevZz3Knp96dp2c7e8Xey1k52ylnOTuiIkV6h9BDQicJ6dnd+f0B+kOkJJDNbHnerxcv2N3J7MPOTvbJN9+ZMZZlISIiIiIiteOwO4CIiIiISDRRgRYRERERqQMVaBERERGROlCBFhERERGpAxVoEREREZE6UIEWEREREakDFWgRERERkTpw2R1ARCQeGWNGAzfs5aHPgcF7ub/QsqzTjTEfApl7efw04HJg4F4euwtI2MfzfQK8DrxZ389pWdane7lfRCTqqUCLiNijMXCbZVlf/nyHMcYHvABMsizr5t0XNsa8u+ufNZZl9drjsQeBROAIoK9lWYHdHhsJ5O56fG/P9wSQFKbnFBGJSZrCISIiIiJSByrQIiIiIiJ1oAItIiIiIlIHKtAiIiIiInWgAi0iIiIiUgcq0CIiIiIidaACLSIiIiJSByrQIiIiIiJ1oAupiIjY5yFjzPbdbjuB9cC5xpheeyz785UAjzHGTNrjsTbsvCAKwFfGGGuPr3toP8+3Yte/w/WcIiIxx1iWdeClREREREQE0BQOEREREZE6UYEWEREREakDFWgRERERkTqIuoMIs7KyrJYtW9ry3GVlZSQnJ9vy3LKTtoG99PrbT9vAftoG9tM2sF+8bIOZM2dusSwre8/7o65At2zZkp9++smW5540aRJ9+/a15bllJ20De+n1t5+2gf20DeynbWC/eNkGxpg1e7tfUzhEREREROpABVpEREREpA5UoEVERERE6iDq5kCLiIiIxKKamhry8/OprKy0O8oBpaamsnjxYrtj1JvExESaNWuG2+2u1fIq0CIiIiIRID8/H7/fT8uWLTHG2B1nv3bs2IHf77c7Rr2wLIutW7eSn59Pq1atavU1msIhIiIiEgEqKyvJzMyM+PIca4wxZGZm1mnkXwVaREREJEKoPNujrq+7CrSIiIiISB2oQIuIiIgIAI899hgdOnTg7LPPBuCDDz7gjjvu2O/XXH/99Xz99ddhyzR8+HCKiooOuNw111zD5MmT97vMwIED2b59+yFnUoEWEREREQCeeuopPvnkE9544w0A7r//fq644or9fs3VV1/NvffeG7ZMn3zyCWlpaftdZtu2bUydOpXevXvvd7lzzz2Xp5566pAz6SwcIiIiIhHmmmtgzpz6XWfHjjB+/L4fv/zyy1m5ciWjRo3iwgsvZMSIEXg8HrKysgAYPXo0p556Kueddx4vvfQS06dP54033qBFixZs3bqVDRs20KhRo4POV1hYyBlnnEFJSQmBQICnn36ak046iZYtW/LTTz9RWlrKsGHD6NWrF1OmTKFp06Z8+OGHeL1e3n33XYYOHQpAcXExJ5xwAhMnTuTwww/nrLPOon///lxyySWMGjWKk046iZtuuumgc4JGoEVEREQEeOaZZ2jSpAnffPMN1157LT/88APHH3/8L48/99xz3HHHHXz33Xc8/vjjPP744788dvzxx/PDDz/8Zp0PPPAAHTt2/M2fP/7xj79Z9s0332TIkCHMmTOHuXPn0rFjx98ss3z5cq688koWLlxIWloa7733HgA//PADnTt3Bnaeo/qJJ57gggsuYMKECWzfvp1LLrkEgPT0dKqqqti6deshvVYagRYRERGJMPsbKW4ohYWFZGdn/3I7NzeXO+64g379+vHmm2+SkZHxy2M5OTkUFBT8Zh033HADN9xwQ62er2vXrlx44YXU1NQwZsyYvRboVq1a/XJ/586dWb169V6zDho0iHfeeYcrr7ySuXPn/modP2fNzMysVa690Qi0iIiIiPyG1+v9zbmR58+fT2ZmJoWFhb+6v7KyEq/X+5t11GUEunfv3kyePJmmTZty7rnn8uqrr/5mGY/H88u/nU4ngUBgr1lDoRCLFy/G6/Wybdu2WmWtCxVoEREREfmNDh06kJeX98vt6dOn8+mnnzJ79mwee+wxVq1a9ctjy5Yt4+ijj/7NOm644QbmzJnzmz+PPfbYb5Zds2YNOTk5XHLJJVx00UXMmjXroLM+8sgjdOjQgbfeeuuXUW3YedXBDRs20LJly1qve2/CVqCNMS8ZYzYZYxbs43FjjHnMGJNnjJlnjDl+b8uJiIiISMPr3bs3s2fPxrIsqqqquOSSS3jppZdo0qQJd999NxdeeCGWZVFTU0NeXh5dunQ5pOebNGkSHTt2pFOn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YBIwdI+H4nI/UIH+NV1+3H4H3AbGmEbGGLPr3yew8328tcGTxjftBzbSPhB+u17fF4HFlmU9vI/FtB+EUW22gfaF8DLGZO8aecYY4wUGAkv2WCwu9wNN4diNLj9uv1pug9OAPxhjAkAFcKalKwLVK2PMW0BfIMsYkw/cys6DR7QfNIBavP7aB8KvJ3AuMH/X/E+AvwPNQftBA6nNNtC+EF6NgX/tOkOWA3jbsqyP1It0JUIRERERkTrRFA4RERERkTpQgRYRERERqQMVaBERERGROlCBFhERERGpAxVoEREREZE6UIEWEREREakDFWgRERERkTpQgRYRiVHGmK7GmHnGmERjTLIxZqEx5mi7c4mIRDtdSEVEJIYZY+4EEgEvkG9Z1j02RxIRiXoq0CIiMcwYkwDMACqBHpZlBW2OJCIS9TSFQ0QktmUAPsDPzpFoERE5RBqBFhGJYcaYicAEoBXQ2LKsq2yOJCIS9Vx2BxARkfAwxpwHBCzLetMY4wSmGGP6W5b1td3ZRESimUagRURERETqQHOgRURERETqQAVaRERERKQOVKBFREREROpABVpEREREpA5UoEVERERE6kAFWkRERESkDlSgRURERETqQAVaRERERKQO/g9n/4qUGpK0XQAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 864x576 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from scipy.integrate import simps\n",
    "\n",
    "# 定义函数\n",
    "def f(x):\n",
    "    return np.sin(x)\n",
    "\n",
    "# 定义积分区间\n",
    "a, b = 0, np.pi\n",
    "n = 10  # 分割区间数\n",
    "\n",
    "# 创建x值\n",
    "x = np.linspace(a, b, n+1)\n",
    "y = f(x)\n",
    "\n",
    "# 矩形法（左矩形）\n",
    "x_left = x[:-1]  # 左端点\n",
    "y_left = y[:-1]\n",
    "left_rect_integral = np.sum(y_left * (b - a) / n)\n",
    "\n",
    "# 矩形法（右矩形）\n",
    "x_right = x[1:]  # 右端点\n",
    "y_right = y[1:]\n",
    "right_rect_integral = np.sum(y_right * (b - a) / n)\n",
    "\n",
    "# 梯形法\n",
    "trapezoid_integral = np.trapz(y, x)\n",
    "\n",
    "# 辛普森法\n",
    "simpson_integral = simps(y, x)\n",
    "\n",
    "# 打印结果\n",
    "print(f\"左矩形法积分结果: {left_rect_integral}\")\n",
    "print(f\"右矩形法积分结果: {right_rect_integral}\")\n",
    "print(f\"梯形法积分结果: {trapezoid_integral}\")\n",
    "print(f\"辛普森法积分结果: {simpson_integral}\")\n",
    "\n",
    "# 可视化结果\n",
    "x_fine = np.linspace(a, b, 1000)\n",
    "y_fine = f(x_fine)\n",
    "\n",
    "plt.figure(figsize=(12, 8))\n",
    "\n",
    "# 绘制函数曲线\n",
    "plt.plot(x_fine, y_fine, 'b', label='f(x) = sin(x)')\n",
    "\n",
    "# 绘制左矩形法\n",
    "plt.bar(x_left, y_left, width=(b - a) / n, alpha=0.2, align='edge', edgecolor='black', label='左矩形法')\n",
    "\n",
    "# 绘制右矩形法\n",
    "plt.bar(x_right, y_right, width=-(b - a) / n, alpha=0.2, align='edge', edgecolor='red', label='右矩形法')\n",
    "\n",
    "# 绘制梯形法\n",
    "for i in range(n):\n",
    "    plt.fill([x[i], x[i], x[i+1], x[i+1]], [0, y[i], y[i+1], 0], 'green', edgecolor='black', alpha=0.2)\n",
    "\n",
    "# 绘制辛普森法\n",
    "for i in range(0, n, 2):\n",
    "    x_simp = np.linspace(x[i], x[i+2], 100)\n",
    "    y_simp = np.polyval(np.polyfit(x[i:i+3], y[i:i+3], 2), x_simp)\n",
    "    plt.fill_between(x_simp, y_simp, alpha=0.2, color='purple')\n",
    "\n",
    "# 添加图例和标签\n",
    "plt.legend()\n",
    "plt.xlabel('x')\n",
    "plt.ylabel('f(x)')\n",
    "plt.title('数值积分方法演示')\n",
    "plt.grid(True)\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "思考：如何处理下面函数的积分？\n",
    "$$\n",
    "\\int_0^{\\infty} e^{-u^2} u^x \\mathrm{~d} u=\\frac{1}{2} \\Gamma\\left(\\frac{x+1}{2}\\right)\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### 二维积分"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "多维问题总是比一维的问题麻烦的多。首先，对N维空间进行采样所需的函数求值次数随着进行一维积分所需次数的N次方而增加。如果你需要30个函数求值来粗略地进行一维积分，那么你可能需要大约30000个求值才能达到三维积分的粗略水平。其次，N维空间中的积分区域是由N-1维边界定义的，该边界本身可能非常复杂：例如，它不需要是凸的或简单连接的。相比之下，一维积分的边界由两个数组成，即它的上限和下限。\n",
    "有些多维积分可以化为一维积分，如\n",
    "$$\n",
    "\\int_0^x d t_n \\int_0^{t_n} d t_{n-1} \\cdots \\int_0^{t_3} d t_2 \\int_0^{t_2} f\\left(t_1\\right) d t_1=\\frac{1}{(n-1) !} \\int_0^x(x-t)^{n-1} f(t) d t\n",
    "$$\n",
    "又或者可以利用对称性，可以减少积分维度。如在球面区域上的球对称函数的积分采用球坐标积分，可以化为一维积分。\n",
    "\n",
    "这里介绍一种重复一维积分的方法。假设我们的积分可以写为\n",
    "$$\n",
    "\\begin{aligned}\n",
    "I & \\equiv \\iint d x d y f(x, y) \\\\\n",
    "& =\\int_{x_1}^{x_2} d x \\int_{y_1(x)}^{y_2(x)} d y f(x, y)\n",
    "\\end{aligned}\n",
    "$$\n",
    "定义内部积分\n",
    "$$\n",
    "H(x) \\equiv \\int_{y_1(x)}^{y_2(x)} f(x,y) d y\n",
    "$$\n",
    "则所求积分化为\n",
    "$$\n",
    "I=\\int_{x_1}^{x_2} H(x) d x\n",
    "$$\n",
    "可以通过一维积分的嵌套来实现。\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* 例题：数值计算如下的二重积分\n",
    "$$\n",
    "Z=\\iint_D\\left|\\frac{x+y}{\\sqrt{2}}-x^2-y^2\\right| d x d y .\n",
    "$$\n",
    "其中\n",
    "$$\n",
    "D=\\left\\{(x, y) \\mid x^2+y^2 \\leq 1\\right\\}\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/guilongcheng/opt/anaconda3/lib/python3.9/site-packages/scipy/integrate/quadpack.py:879: IntegrationWarning: The maximum number of subdivisions (50) has been achieved.\n",
      "  If increasing the limit yields no improvement it is advised to analyze \n",
      "  the integrand in order to determine the difficulties.  If the position of a \n",
      "  local difficulty can be determined (singularity, discontinuity) one will \n",
      "  probably gain from splitting up the interval and calling the integrator \n",
      "  on the subranges.  Perhaps a special-purpose integrator should be used.\n",
      "  quad_r = quad(f, low, high, args=args, full_output=self.full_output,\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "552 ms ± 54 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n",
      "519 ms ± 7.75 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "from scipy.integrate import nquad\n",
    "def f(y,x):\n",
    "    return np.abs((x+y)/(2**0.5) - x**2 - y**2)\n",
    "def lim0(x):\n",
    "    return [ - np.sqrt(1-x**2),np.sqrt(1-x**2)]\n",
    "    #return [ 0,np.sqrt(1-x**2)]\n",
    "\n",
    "%timeit nquad(f,[lim0,[-1,1]])\n",
    "\n",
    "from scipy.integrate import dblquad\n",
    "\n",
    "%timeit dblquad(f,-1,1,lambda x:-np.sqrt(1-x**2),lambda x:np.sqrt(1-x**2))\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* 振荡积分？$ \\int sin(100x) dx \\quad  \\int sin^x(100x) dx$\n",
    "* 奇异积分？$\\int_0^{1} \\frac{1}{x} dx $\n",
    "* 多维积分 $64^3 \\times 96 \\times 4 \\times 3 \\times 3 $ 维的积分呢？"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "c:\\Users\\guilongcheng\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\ipykernel_launcher.py:5: RuntimeWarning: invalid value encountered in double_scalars\n",
      "  \"\"\"\n",
      "c:\\Users\\guilongcheng\\AppData\\Local\\Continuum\\anaconda3\\lib\\site-packages\\scipy\\integrate\\quadpack.py:385: IntegrationWarning: The occurrence of roundoff error is detected, which prevents \n",
      "  the requested tolerance from being achieved.  The error may be \n",
      "  underestimated.\n",
      "  warnings.warn(msg, IntegrationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "(nan, nan)"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from scipy.integrate import quad\n",
    "import numpy as np\n",
    "\n",
    "quad(lambda x: np.sin(100*x),0,2*np.pi)\n",
    "#quad(lambda x: np.sin(100*x)**x,0,2*np.pi)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 2.1.2 微分"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### 一阶微分"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "将空间离散成点$x_{i}$，每两个点之间的间隔为$x_{i+1}-x_{i}=h$，函数在这些离散的点上的值为$f_{i}=f(x_{i})$。可以得到一阶导数最简单的表达形式\n",
    "$$\n",
    "f_{i}^{'}=\\frac{f_{i+1}-f_{i}}{h}+O(h)\n",
    "$$\n",
    "其中$O(h)$表示与$h$相同阶数的项。当 $h \\to 0$ 即为连续情形下的一阶导数公式。称为一阶导数的两点公式。如果我们将$f_{i+1}$和$f_{i-1}$在$x_{i}$点展开，则可以得到更高精度的公式（三点公式）\n",
    "\\begin{align*}\n",
    "f_{i+1}-f_{i-1} & =2hf_{i}^{'}+O(h^{3})\\\\\n",
    "f_{i}^{'} & =\\frac{f_{i+1}-f_{i-1}}{2h}+O(h^{2})\n",
    "\\end{align*}\n",
    "原则上我们可以加上更多点来得到更高精度的公式。然而在许多情况中，这并不实际。在实际问题中，边界点的导数值更重要，需要精确计算。导数表达式中涉及的点越多，在边界处获得精确的导数就越困难。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### 二阶微分"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "同样的对$f_{i\\pm1}$在$x_{i}$点的展开，可以得到二阶导数的三点公式\n",
    "\\begin{align*}\n",
    "f_{i+1}-2f_{i}+f_{i-1} & =h^{2}f_{i}^{''}+O(h^{4})\\\\\n",
    "f_{i}^{''} & =\\frac{f_{i+1}-2f_{i}+f_{i-1}}{h^{2}}+O(h^{2})\n",
    "\\end{align*}\n",
    "类似的，也可以用更多的点给出更高精度的公式(五点公式)\n",
    "$$\n",
    "f_{i}^{\\prime\\prime}=\\frac{1}{12h^{2}}\\left(-f_{i-2}+16f_{i-1}-30f_{i}+16f_{i+1}-f_{i+2}\\right)+O\\left(h^{4}\\right)\n",
    "$$\n",
    "然而获取在边界处的导数仍然困难。一种思路是利用函数插值来给出边界上的结果。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* 例题：设每间隔0.1秒测量了一个物理的位置，请给出物理的加速度随时间变化的图示。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x25781581250>]"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "r = np.array([0.593311, 0.499786, 0.405665, 0.312793, 0.222815, 0.137167, 0.057062, \\\n",
    "-0.0165038, -0.0827553, -0.14113, -0.191268, -0.233, -0.266334, \\\n",
    "-0.291435, -0.30861, -0.318286, -0.320994, -0.317346, -0.308014, \\\n",
    "-0.293718, -0.275202, -0.253219, -0.228516, -0.201822, -0.173833, \\\n",
    "-0.145206, -0.116543, -0.0883933, -0.0612431, -0.0355129, -0.0115564, \\\n",
    "0.0103399, 0.029956, 0.0471362, 0.0617858, 0.0738674, 0.0833957, \\\n",
    "0.0904327, 0.0950818, 0.0974818, 0.0978011])\n",
    "t = np.arange(1,5.1,0.1)\n",
    "plt.plot(t,r)\n",
    "ddy = (np.roll(r,-1)+ np.roll(r,1) - 2 * r) / 0.1**2\n",
    "plt.plot(t[1:-1],ddy[1:-1])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 2.1.3 初值常微分方程"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "对于包含常微分方程的问题，总是可以重写为一阶微分方程组的求解。例如二阶方程\n",
    "$$\n",
    "\\frac{d^2 y}{d x^2}+q(x) \\frac{d y}{d x}=r(x)\n",
    "$$\n",
    "可以写为两个一阶微分方程\n",
    "$$\n",
    "\\begin{aligned}\n",
    "&\\frac{d y}{d x}=z(x) \\\\\n",
    "&\\frac{d z}{d x}=r(x)-q(x) z(x)\n",
    "\\end{aligned}\n",
    "$$\n",
    "这里引入z为一个新的变量。一般我们都将各阶导数作为新的变量，不过有时根据实际的问题，也可以增加一些额外的项或因子。\n",
    "因此我们最终将常微分方程转化为求解N个耦合的一阶微分方程组的问题：\n",
    "$$\n",
    "\\frac{d y_i(x)}{d x}=f_i\\left(x, y_0, \\ldots, y_{N-1}\\right), \\quad i=0, \\ldots, N-1\n",
    "$$\n",
    "\n",
    "对于常微分方程的求解，并不完全由方程的形式来决定。特别数值上求解时，更重要的取决于问题的边界条件。边界条件的形式决定了采用哪种数值方法。边界条件可以分为两类：\n",
    "* 初值问题。已知初始位置$x_s$时的$y_i$，需要求解之后其他点或终点$x_f$时的$y_i$。\n",
    "* 两点边值问题。\n",
    "\n",
    "\n",
    "我们通过初值问题来看一下微分方程的离散化。\n",
    "\n",
    "最为简单的算法称为Euler 方法，它从一个简单的数值 $t_{0}$ 开始，直接计算该处的导数值并前行，令 $t_{n}=t_{0}+nh$ ，其中 $h\\in\\mathbb{R}$ 是积分的步长，那么我们有，\n",
    "$$\n",
    "y_{n+1}=y_{n}+hf(t_{n},y_{n})\n",
    "$$\n",
    "这个算法称为向前Euler方法，它的的精度只有 $O(h)$，实际上并不值得推荐。 $y_{n+1}$ 的计算只需要用到 $y_{m\\le n}$ 便可以直接计算出来。这种方法称为 **显式方法**。另外右边也可以选用$f(t_{n+1},y_{n+1}$，则需要求解方程才能得到$y_{n+1}$，这类方法称为 **隐式法** 。\n",
    "然而，欧拉方法在概念上很重要;无论如何，各类方法都可以归结为同一个想法:在函数中添加小的增量，对应于导数(方程右侧)乘以步长 。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* 例题：已知一谐振子受力的方程为$$ x^{''} = - k x $$, 设$k = 0.1$,初始位于$x = 0$,初始速度为$v = 4 m/s$，画出其位置随时间的变化情况。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(1000,)\n",
      "(2, 1000)\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from scipy.integrate import solve_ivp\n",
    "def updata(t,x,v,tau,k=0.1):\n",
    "    xb = x + tau*v\n",
    "    vb = v + tau*(-k * x)\n",
    "    return  xb,vb \n",
    "\n",
    "xi = 0\n",
    "vi = 4\n",
    "xt = []\n",
    "vt = []\n",
    "# 改一下tau的取值，看看变化,比如0.01或1\n",
    "tau = 0.1\n",
    "n = 100/tau\n",
    "for t in np.arange(n):\n",
    "    xb,vb = updata(t,xi,vi,tau)\n",
    "    xt.append(xb)\n",
    "    vt.append(vb)\n",
    "    xi,vi = xb,vb\n",
    "\n",
    "plt.plot(xt,label=\"x(t)\")\n",
    "plt.plot(vt,label=\"v(t)\")\n",
    "plt.legend()\n",
    "plt.show()\n",
    "\n",
    "def f(t,y,k):\n",
    "    return [y[1],-k*y[0]]\n",
    "sol = solve_ivp(f,[0,100],[0,4],t_eval=np.arange(0,100,0.1),args=(0.1,))\n",
    "print(sol.t.shape)\n",
    "print(sol.y.shape)\n",
    "plt.plot(sol.t,sol.y[0],label=\"x(t)\")\n",
    "plt.plot(sol.t,sol.y[1],label=\"v(t)\")\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* 例题：设已知两星球的初始位置和速度，试给出它们一段时间内的运动轨迹。（简单起见，可以考虑二维的情况）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAEQCAYAAACgBo8fAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAawklEQVR4nO3de5AU9b338feXXUAQ5LoocnGROyoQXNEYL3gHjKIRT7zfgzzGPCbnSZXkVOVyNBU1OUl5chQNeoxGTzQaNaJBCccbGjG6KCCIyAooKyiLgBhQYdnv80dPzLrMsr273fObmf28qrZmp/vH9KfQ/tDV0/1rc3dERKTwtQsdQEREkqFCFxEpEip0EZEioUIXESkSKnQRkSKhQhcRKRJBC93M7jKzDWa2NMbYY8zsNTOrNbOpDdZdbGYrMz8Xp5dYRCR/hT5CvxuYGHPse8AlwO/rLzSznsCPgcOB8cCPzaxHchFFRApD0EJ39/nApvrLzGywmT1lZgvN7AUzG5EZu8bdlwB1DT7mFGCeu29y983APOL/IyEiUjRKQwfIYhYw3d1XmtnhwEzg+D2M7wesrfe+OrNMRKRNyatCN7MuwJHAQ2b2j8Udm/pjWZZpPgMRaXPyqtCJTgFtcfexzfgz1cCEeu/7A88lF0lEpDCE/lL0S9x9K7DazM4GsMiYJv7YXOBkM+uR+TL05MwyEZE2JfRli/cDC4DhZlZtZpcD5wOXm9liYBkwJTP2MDOrBs4GfmNmywDcfRNwPfBq5ue6zDIRkTbFNH2uiEhxyKtTLiIi0nLBvhTt3bu3l5eXh9q8iEhBWrhw4UZ3L8u2Llihl5eXU1lZGWrzIiIFyczebWydTrmIiBQJFbqISJFQoYuIFAkVuohIkVChi4gUCRW6iEiRUKGLiBQJFbpISDVvw7M/g9UvQO3nodNIgcu36XNF2pb3F8L8X8DzN0H7veHAY2HIiTD0JOg+MHQ6KTAqdJGQxp4LIybDmr9C1f9C1TxYMSda13t4tG7UGdB3DFi2Z7mI/FOw2RYrKipct/6LNOAOG1dGxf72XFjzIvgu6DEIRk2Bg86AvmNV7m2YmS1094qs61ToInls20fw1hPw5p9g1fNRufceBmPPg9HnwD59QyeUHFOhixSD7Ztg+WxYdD+sfRmsXXS+fez5MHwylHYInVByQIUuUmw2VsGi/4HF98Mn66HLvlBxOVRcCl36hE4nKVKhixSrul3Rl6mvzIpe27WHg78Bh18J/Q4NnU5SsKdCb/I6dDO7y8w2mNnSRtabmf3azKrMbImZjWttYBGJqV0JDDsFLngYrq6EisvgrTlwx/Hw28lQ9XT0Rau0CXFuLLobmLiH9ZOAoZmfacBtrY8lIs3WeyhM/jn865twyg2waTXc9w244zhY/jjU1YVOKClrstDdfT6waQ9DpgC/88jLQHcz01fvIqHstQ989Sq4ZhGc9mv4dAv84QK47auw7E86Yi9iSdz63w9YW+99dWbZbsxsmplVmlllTU1NApsWkUaVdoRDL45OxZz131GRP3RxdMT+zrOh00kKkij0bHc4ZD0EcPdZ7l7h7hVlZVmfcSoiSSsphUOmwlULYMpM2LYR7j0D7jkNqheGTicJSqLQq4EB9d73B9Yl8LkikqR2JfCV8+E7C2HiTfDhm3Dn8fDwt2CrdtlikEShzwYuylztcgTwsbuvT+BzRSQNpR3hiOnROfaj/x+8+Rj8VwW88EvY+VnodNIKcS5bvB9YAAw3s2ozu9zMppvZ9MyQOcAqoAq4A7gqtbQikpyOXeGEH8G3/waDj4Onr4OZh8OKJ0MnkxbSjUUiEnnnWXjqB1CzHEaeDpN/AV33C51KGmjVjUUi0kYMPg6mvwAn/BhW/gVuGQ+Vv9X16wVEhS4i/1TSHo7+V/g/L0Hf0fDEd+HuU6O5YyTvqdBFZHe9BsPFj8OUW2HDm3D7UfDKHbopKc+p0EUkOzP4ygXRl6blR8Gc78N9Z8FWXcSWr1ToIrJnXfeD8x+CU38J776UmULg0dCpJAsVuog0zQwOuwKmvwg9D4SHLoHHroadn4ZOJvWo0EUkvt5D4LK/wNHfh9fvhTtOiJ6BKnlBhS4izVNSCif8MJqD/e8fwG+OhSUPhU4lqNBFpKWGnAhXvhBd3vjIFfDE96B2R+hUbZoKXURarlu/6PLGr10DlXdFMzj+fUPoVG2WCl1EWqekPZx0HUy9C9YvhlnHwbpFoVO1SSp0EUnGwWfB5XOj3++aCEsfDpunDVKhi0hy+o6Bac/C/mPhj5fBsz/T3aU5pEIXkWR16QMXzYaxF8DzN0XXq+/aGTpVm1AaOoCIFKHSDjDlFug+AJ67AT5ZD/9yTzQHu6RGR+gikg4zmDADTr8FVj0Hv50En3wQOlVRU6GLSLrGXQjnPQibVsOdJ8FH74ROVLRU6CKSvqEnwiV/hp3boiP1DctDJypKKnQRyY39x8IlcwCD306Gda+HTlR0VOgikjt9RsBlT0KHLnDP6fDugtCJiooKXURyq+eBcNlT0GVfuPdMWD0/dKKioUIXkdzr1g8ufRJ6lMPvvxk9OENaTYUuImF0KYOLZ0O3/vA/Z8PaV0InKngqdBEJp0ufaLbGLvtGzyutXhg6UUFToYtIWF33i0q9c0+478xoxkZpERW6iIT3j3nVO3aLjtR181GLqNBFJD90HwgXPgpeF139omkCmk2FLiL5o/cQOP8h2LYR7psKn30cOlFBiVXoZjbRzFaYWZWZzciyvpuZPW5mi81smZldmnxUEWkT+h0K59wHNW/B/efBzs9CJyoYTRa6mZUAtwKTgFHAuWY2qsGwbwNvuvsYYALwSzPrkHBWEWkrBh8PZ94O774Ij3wL6upCJyoIcY7QxwNV7r7K3XcADwBTGoxxoKuZGdAF2ATUJppURNqWQ6bCKT+D5bPhmetDpykIcR5w0Q9YW+99NXB4gzG3ALOBdUBX4Jvuvts/qWY2DZgGMHDgwJbkFZG25IirYONKePFX0GsIfOX80InyWpwjdMuyrOFDAk8BFgH7A2OBW8xsn93+kPssd69w94qysrJmRhWRNscMJv8CDpwAj18Da14MnSivxSn0amBAvff9iY7E67sUeMQjVcBqYEQyEUWkTStpD2ffAz0HwR8u0DXqexCn0F8FhprZoMwXnecQnV6p7z3gBAAz2xcYDqxKMqiItGGdusN5fwAM7j8HPtsaOlFearLQ3b0WuBqYCywHHnT3ZWY23cymZ4ZdDxxpZm8ATwPXuvvGtEKLSBvU80D45r3REfpjV4E3PPMr5oH+UioqKryysjLItkWkgC24Feb+G5z4Ezjqe6HT5JyZLXT3imzrdKeoiBSWI66Cg8+Cp6+Dd54JnSavqNBFpLCYwen/BWUj4I+Xw5b3QifKGyp0ESk8HfaGb94HdbvgwYugdkfoRHlBhS4ihanXYDhjJqx7HZ7+99Bp8oIKXUQK18ivw2HfggW3wMp5odMEp0IXkcJ28k9h34Ph0Sth6/rQaYJSoYtIYWu/F0y9C3Z+Co9Oi86rt1EqdBEpfGXDYdLPYfV8+OvNodMEo0IXkeLwlQvgoDPh2RvggzdCpwlChS4ixcEMTv0VdO4Jj06H2s9DJ8o5FbqIFI/OPeG0X8OHS+G5G0OnyTkVuogUl+ETo9Mvf70Z1r4aOk1OqdBFpPiccgPs0y+6lHHH9tBpckaFLiLFZ699YMqtsOkdeO6G0GlyRoUuIsXpwGNh3EXRdLvrF4dOkxMqdBEpXiddB517wez/2yZuOFKhi0jx6tQDJt0I6xfB334TOk3qVOgiUtwO+gYMPRme+WnRz52uQheR4mYGp/4y+v3P3w+bJWUqdBEpft0HwnE/gJVzYcVTodOkRoUuIm3D+Cuh9zB4akbRTgugQheRtqG0A0y8ETavjh6IUYRU6CLSdgw5AUZ8Heb/B3z8fug0iVOhi0jbcvJPo2vS5/0odJLEqdBFpG3pOQi+dg0s/SO8uyB0mkSp0EWk7Tnqu9BlP5j3Q3APnSYxKnQRaXs67B1dxlj9Kix/PHSaxKjQRaRtGnsB9B4OT/877NoZOk0iVOgi0jaVlMKJP4GPquC134VOk4hYhW5mE81shZlVmdmMRsZMMLNFZrbMzJ5PNqaISAqGT4KBX40eV/f530OnabUmC93MSoBbgUnAKOBcMxvVYEx3YCZwursfBJydfFQRkYSZwUnXw7YN8PLM0GlaLc4R+nigyt1XufsO4AFgSoMx5wGPuPt7AO6+IdmYIiIpGXAYDD8VXroFPt0SOk2rxCn0fsDaeu+rM8vqGwb0MLPnzGyhmV2U7YPMbJqZVZpZZU1NTcsSi4gkbcIM+PxjePm20ElaJU6hW5ZlDS/cLAUOBU4FTgF+aGbDdvtD7rPcvcLdK8rKypodVkQkFX1HR1MCvHxbQR+lxyn0amBAvff9gXVZxjzl7tvcfSMwHxiTTEQRkRyY8IPMUXrhnkuPU+ivAkPNbJCZdQDOAWY3GPMYcLSZlZpZZ+BwYHmyUUVEUrTfwTDy9MxR+ubQaVqkyUJ391rgamAuUUk/6O7LzGy6mU3PjFkOPAUsAV4B7nT3penFFhFJwYQZ8PlWWFCYR+nmgeYxqKio8MrKyiDbFhFp1B8uhNXPw/eWQceuodPsxswWuntFtnW6U1REpL6jvguffQwL7wmdpNlU6CIi9fU7FMqPjr4crd0ROk2zqNBFRBr62ndh6/vRnOkFRIUuItLQkBNg34Phr/8JdXWh08SmQhcRacgseqpRzVuw8i+h08SmQhcRyeagM6HbAFhwS+gksanQRUSyKWkPh10Ba16AD5eFThOLCl1EpDHjLoLSveCVWaGTxKJCFxFpTOeecMhUWPJgQUwHoEIXEdmT8VfCzu3w+n2hkzRJhS4isid9R0ePqXvlDqjbFTrNHqnQRUSaMn4abHkXVs4LnWSPVOgiIk0ZeRrs3Qdey+/5XVToIiJNKWkPY8+Dt+fC1vWh0zRKhS4iEse4i8B3weLfh07SKBW6iEgcvQbDAUfBa/dCoOdINEWFLiIS17gLYfNqWPNi6CRZqdBFROIaeTp07Aav3xs6SVYqdBGRuDp0ju4cffOx6KlGeUaFLiLSHGPOhdrPYPkToZPsRoUuItIc/SugRzm88WDoJLtRoYuINIcZHHI2rJ4Pn3wQOs2XqNBFRJrrkH8Br4Olj4RO8iUqdBGR5iobBn3H5N1pFxW6iEhLHHI2rHsdNlaFTvIFFbqISEscfBZgsCx/Truo0EVEWmKf/WHAeFg+O3SSL6jQRURaauRp8MEbsHlN6CRAzEI3s4lmtsLMqsxsxh7GHWZmu8xsanIRRUTy1IivR695cpNRk4VuZiXArcAkYBRwrpmNamTcTcDcpEOKiOSlnoNgv0Ng+eOhkwDxjtDHA1XuvsrddwAPAFOyjPsO8DCwIcF8IiL5beTpsPZveXGTUZxC7wesrfe+OrPsC2bWDzgTuD25aCIiBWDkaYDDW38OnSRWoVuWZQ1nd78ZuNbd9/hIbDObZmaVZlZZU1MTM6KISB4rGwE9B8OKOaGTxCr0amBAvff9gXUNxlQAD5jZGmAqMNPMzmj4Qe4+y90r3L2irKysZYlFRPKJGQw7JXroxY7tQaPEKfRXgaFmNsjMOgDnAF+68NLdB7l7ubuXA38ErnL3PyUdVkQkLw05MZpSN/CTjJosdHevBa4munplOfCguy8zs+lmNj3tgCIiee+Ar0H7zlA1L2iM0jiD3H0OMKfBsqxfgLr7Ja2PJSJSQNrvBYOOgZV/Af95dBomAN0pKiKShCEnRneMfvROsAgqdBGRJAw9KXoNeNpFhS4ikoQe5dBrKFT9b7AIKnQRkaQceCy8uwB27QyyeRW6iEhSyo+GnduiB18EoEIXEUlK+dHR6+r5QTavQhcRScrevaDPQSp0EZGiMOjoaPbF2s9zvmkVuohIkgYdE00DUF2Z802r0EVEknTAkYAFmddFhS4ikqROPaDPyOi0S46p0EVEkjZgfHTKpa4up5tVoYuIJK3/ePj8Y9j4dk43q0IXEUnagPHRa/UrOd2sCl1EJGm9hkTn0teq0EVECpsZ9D8Mql/N6WZV6CIiaeg/Hmregk+35GyTKnQRkTT0Gxe9rl+cs02q0EVE0tB3TPT6wZKcbVKFLiKShr17Q9f9Yb0KXUSk8PUdrSN0EZGisN/o6OaiHdtzsjkVuohIWvqOAa+DDW/mZHMqdBGRtPQdHb3m6EoXFbqISFq6DYC9usEHb+Rkcyp0EZG0mEHZiJxN0qVCFxFJU+9hULMiJ5tSoYuIpKlsBGzfCNs+Sn1TKnQRkTSVDY9eN6Z/lB6r0M1sopmtMLMqM5uRZf35ZrYk8/OSmY1JPqqISAHqPSx6zcFplyYL3cxKgFuBScAo4FwzG9Vg2GrgWHcfDVwPzEo6qIhIQeo2ANp3zskXo3GO0McDVe6+yt13AA8AU+oPcPeX3H1z5u3LQP9kY4qIFKh27aD30Ggq3bQ3FWNMP2BtvffVmWWNuRx4MtsKM5tmZpVmVllTUxM/pYhIIes5GDatTn0zcQrdsizzrAPNjiMq9GuzrXf3We5e4e4VZWVl8VOKiBSyHuXw8Vqo25XqZuIUejUwoN77/sC6hoPMbDRwJzDF3dO/PkdEpFD0KIe6Wtj6fqqbiVPorwJDzWyQmXUAzgFm1x9gZgOBR4AL3T03t0SJiBSKHuXR6+Y1qW6myUJ391rgamAusBx40N2Xmdl0M5ueGfYjoBcw08wWmVllaolFRApNjgq9NM4gd58DzGmw7PZ6v18BXJFsNBGRIrFPP7CS8EfoIiLSSiWl0H0AbH431c2o0EVEcqH7AbBFhS4iUvj22R8++TDVTajQRURyoet+8Ml6qKtLbRMqdBGRXOjaF+p2wqebUtuECl1EJBe67he9frI+tU2o0EVEcqFr3+j1kw9S24QKXUQkF3SELiJSJLrsG71uVaGLiBS20o6wV7fo+aIpUaGLiORKp56wXVe5iIgUvk494NPNTY9rIRW6iEiudO6p69BFRIpCp546QhcRKQqdesB2FbqISOHr3BM+/xh21aby8Sp0EZFc6dQjev1sSyofr0IXEcmVDl2i1x1/T+XjVegiIrnSoXP0umN7Kh+vQhcRyZX2e0evO1XoIiKF7Ysj9G2pfLwKXUQkV9pnCl1H6CIiBa5D5pSLjtBFRAqcCl1EpEiUdopeaz9L5eNV6CIiudKuJHqt25XOx6fyqSIisrt2pdFrnW79FxEpbF8coavQRUQK2z+O0D2dUy6lcQaZ2UTgP4ES4E53v7HBesusnwxsBy5x99cSzkr5jD/vtmzNjacmvRkRkXRY4HPoZlYC3ApMAkYB55rZqAbDJgFDMz/TgNsSzpm1zPe0XEQk77RrB1jQUy7jgSp3X+XuO4AHgCkNxkwBfueRl4HuZtY34awiIoWvXWnQq1z6AWvrva/OLGvuGMxsmplVmlllTU1Nc7OKiBS+g86APiNT+eg459AtyzJvwRjcfRYwC6CiomK39SIiRe+sO1P76DhH6NXAgHrv+wPrWjBGRERSFKfQXwWGmtkgM+sAnAPMbjBmNnCRRY4APnb39UkGbexqFl3lIiISafKUi7vXmtnVwFyiyxbvcvdlZjY9s/52YA7RJYtVRJctXppGWJW3iEjjYl2H7u5ziEq7/rLb6/3uwLeTjSYiIs2hO0VFRIqECl1EpEio0EVEioQKXUSkSFj0fWaADZvVAO+28I/3BjYmGCdpytc6+Z4P8j+j8rVOPuc7wN3Lsq0IVuitYWaV7l4ROkdjlK918j0f5H9G5WudfM/XGJ1yEREpEip0EZEiUaiFPit0gCYoX+vkez7I/4zK1zr5ni+rgjyHLiIiuyvUI3QREWlAhS4iUiTyutDNbKKZrTCzKjObkWW9mdmvM+uXmNm4PMt3fibXEjN7yczG5FO+euMOM7NdZjY13/KZ2QQzW2Rmy8zs+XzKZ2bdzOxxM1ucyZfKLKN7yHeXmW0ws6WNrA+9fzSVL/T+scd89cYF2T9axN3z8odoqt53gAOBDsBiYFSDMZOBJ4memHQE8Lc8y3ck0CPz+6R8y1dv3DNEs2lOzad8QHfgTWBg5n2fPMv3b8BNmd/LgE1AhxxmPAYYByxtZH2w/SNmvmD7R5x89f4/yPn+0dKffD5Cz/eHUzeZz91fcvfNmbcvEz3JKVfi/P0BfAd4GNiQw2wQL995wCPu/h6Au+cyY5x8DnQ1MwO6EBV6Oo9zz8Ld52e22ZigD29vKl/g/SPO3x+E2z9aJJ8LPbGHU6ekudu+nOhoKVeazGdm/YAzgdvJvTh/f8OAHmb2nJktNLOLcpYuXr5bgJFEj1t8A7jG3etyEy+WkPtHc+V6/2hS4P2jRWI94CKQxB5OnZLY2zaz44j+hz0q1UQNNptlWcN8NwPXuvuu6CAzp+LkKwUOBU4AOgELzOxld3877XDEy3cKsAg4HhgMzDOzF9x9a8rZ4gq5f8QWaP+I42bC7R8tks+Fnu8Pp461bTMbDdwJTHL3j3KUDeLlqwAeyPzP2huYbGa17v6nPMlXDWx0923ANjObD4wBclHocfJdCtzo0cnWKjNbDYwAXslBvjjy/uHtAfePOELuHy0T+iT+Hr6MKAVWAYP455dSBzUYcypf/tLnlTzLN5DoOatH5uPfX4Pxd5PbL0Xj/P2NBJ7OjO0MLAUOzqN8twE/yfy+L/A+0DvH/53LafxLx2D7R8x8wfaPOPkajMvp/tHSn7w9Qvc8ejh1K/L9COgFzMz8K1/rOZrBLWa+YOLkc/flZvYUsASoA+509z1eYpbLfMD1wN1m9gZRaV7r7jmbctXM7gcmAL3NrBr4MdC+Xr5g+0fMfMH2j5j5Co5u/RcRKRL5fJWLiIg0gwpdRKRIqNBFRIqECl1EpEio0EVEEhR30q/M2GPM7DUzq204+ZeZPWVmW8zsibjbVqGLiCTrbmBizLHvAZcAv8+y7hfAhc3ZsApdRCRBnmXSLzMbnDniXmhmL5jZiMzYNe7+j/ssGn7O08Anzdl23t5YJCJSRGYB0919pZkdDswkmgMoUSp0EZEUmVkXornfH6o3yVfHNLalQhcRSVc7YIu7j83FhkREJCUeTae82szOhi8eDZjK4/Y0l4uISILqT/oFfEg06dczRLNz9iWaAOwBd7/OzA4DHgV6AJ8BH7j7QZnPeYFoOuYuwEfA5e4+d4/bVqGLiBQHnXIRESkSKnQRkSKhQhcRKRIqdBGRIqFCFxEpEip0EZEioUIXESkS/x+AJBPXFTCfPwAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "No artists with labels found to put in legend.  Note that artists whose label start with an underscore are ignored when legend() is called with no argument.\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import scipy.constants as C\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from scipy.integrate import solve_ivp\n",
    "G = C.gravitational_constant\n",
    "M1 = 1.989 * 10**30\n",
    "M2 = 5.972 * 10**24\n",
    "r1_0 = np.array([0,0,0,0])   # x,y,vx,vy\n",
    "r2_0 = np.array([1.521e11,0,0,2.93e3]) # x,y,vx,vy\n",
    "x1,y1,vx1,vy1 = (0,0,0,0)\n",
    "x2,y2,vx2,vy2 =(1.521e11,0,0,2.93e3)\n",
    "\n",
    "t_tol = 24*3600*50\n",
    "tau = 36\n",
    "n = t_tol/tau\n",
    "r1t=[]\n",
    "r2t=[]\n",
    "for t in np.arange(n):\n",
    "    r_norm3 = ((x2-x1)**2 + (y2-y1)**2)**(3/2)\n",
    "    x1p = x1 + tau * vx1 # x_i+1 = x_i + tau * vx_i\n",
    "    y1p = y1 + tau * vy1\n",
    "    vx1p = vx1 + tau * G * M2 / r_norm3 * (x2-x1)\n",
    "    vy1p = vy1 + tau * G * M2 / r_norm3 * (y2-y1)\n",
    "\n",
    "    x2p = x2 + tau * vx2\n",
    "    y2p = y2 + tau * vy2\n",
    "    vx2p = vx2 + tau * G * M1 / r_norm3 * (x1-x2)\n",
    "    vy2p = vy2 + tau * G * M1 / r_norm3 * (y1-y2)\n",
    "    r1t.append((x1p,y1p,vx1p,vy1p))\n",
    "    r2t.append((x2p,y2p,vx2p,vy2p))\n",
    "    x1,y1,vx1,vy1 = x1p,y1p,vx1p,vy1p\n",
    "    x2,y2,vx2,vy2 = x2p,y2p,vx2p,vy2p\n",
    "r1t = np.array(r1t)\n",
    "r2t = np.array(r2t)\n",
    "plt.plot(r1t[:,0],r1t[:,1],\"o\")\n",
    "plt.plot(r2t[:,0],r2t[:,1])\n",
    "plt.show()\n",
    "\n",
    "\n",
    "def sol_f(t,y):\n",
    "    x1,y1,x2,y2,vx1,vy1,vx2,vy2=y\n",
    "    r_norm3 = ((x2-x1)**2 + (y2-y1)**2)**(3/2)\n",
    "    return [vx1,vy1,vx2,vy2,\n",
    "            G * M2 / r_norm3 * (x2-x1),\n",
    "            G * M2 / r_norm3 * (y2-y1),\n",
    "            G * M1 / r_norm3 * (x1-x2),\n",
    "            G * M1 / r_norm3 * (y1-y2)]\n",
    "sol = solve_ivp(sol_f,[0,24*3600*300],[0,0,1.521e11,0,0,0,0,2.93e3],\n",
    "               t_eval=np.arange(0,24*3600*300,36))\n",
    "\n",
    "plt.plot(sol.y[0],sol.y[1],\"o\")\n",
    "plt.plot(sol.y[2],sol.y[3])\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.2 插值与近似"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* $\\pi$的计算"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "如何估计 $\\pi$ 的值?  \n",
    "\n",
    "![pi](./pic/sec1-calcpi.png)  \n",
    "\n",
    "假设已经算出 $ \\pi_{8}=3.061467,\t\\pi_{16}=3.121445, \\pi_{32}=3.136548,\t\\pi_{64}=3.140331 $?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3.141583761904763\n",
      "3.141592653589793\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "from scipy.interpolate import barycentric_interpolate\n",
    "\n",
    "x = np.array([1/2**i for i in range(3,7)])\n",
    "y = np.array([3.061467,3.121445,3.136548,3.140331])\n",
    "\n",
    "print(barycentric_interpolate(x,y,0))\n",
    "print(np.pi)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 2.2.1 数据插值"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### 一次插值\n",
    "\n",
    "\n",
    "利用两个数据点确定一个线性函数\n",
    "$$\n",
    "y = \\frac{y_1 - y_0}{x_1-x_0}*(x-x_0)+y_0 \\\\ \n",
    "y = \\frac{x-x_1}{x_0-x_1}y_0 + \\frac{x-x_0}{x_1-x_0}y_1 \n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### 二次插值\n",
    "\n",
    "三个数据点确定一个二次函数:\n",
    "$$\n",
    "y = a x^2 + b x +c\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### 拉格朗日插值\n",
    "\n",
    "\n",
    "由已知的数据点来确定一个多项式函数，来推断未知点的信息。例如有n+1个点，那么可以完全确定如下的多项式函数 $$P_{n}(x)=a_{0}+a_{1}x+...+a_{n}x^{n}.$$ \n",
    "上面的形式可以换一种形式来表达。定义如下的n次多项式 $$ L_{j}(x)=\\prod_{0\\le m\\le n,m\\ne j}\\frac{x-x_{m}}{x_{j}-x_{m}},j=0,1,...,n .$$ \n",
    "该多项式满足 $$ L_{j}(x_{i})=\\delta_{ij},0\\le i,j\\le n $$\n",
    "令 $$ P_{n}(x)\\equiv\\sum_{i=0}^{n}y_{i}L_{i}(x), $$ 可以验证它满足$P_{n}(x_{i})=y_{i},i=0,1,...,n$.该公式称为拉格朗日内插公式（Lagrange,1795）。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def lagrange_1(x,y,u):\n",
    "    \"\"\"拉格朗日插值程序\n",
    "\n",
    "    :x: 数据点x坐标\n",
    "    :y: 数据点y坐标\n",
    "    :u: 插值点x 的值\n",
    "    :returns: 插值点y的值\n",
    "\n",
    "    \"\"\"\n",
    "    n=len(x)\n",
    "    m = len(u)\n",
    "    v = np.zeros(m)\n",
    "\n",
    "    for i in range(n):\n",
    "        w = np.ones(m)\n",
    "        for j in range(n):\n",
    "            if j!= i:\n",
    "                w = (u - x[j]) /(x[i] - x[j]) * w  # 计算拉格朗日插值基函数\n",
    "        v = v + w*y[i]   #由 y(x) = \\sum w_i * y_i  给出插值点函数值\n",
    "\n",
    "    return v"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "原则上我们可以按照拉格朗日插值方式，先定义给出基函数，再得到差值点的结果，但稍显麻烦。Neville插值可以更方便的给出差值点的结果。其方法相当于不断的进行线性差值。用数学公式来表达的话，可以写成如下的递推关系 \n",
    "$$ \\begin{aligned}P_{i}(x) & \\equiv f_{i}\\quad i=0,1,2,\\cdots,n\\\\\n",
    "P_{i_{0}i_{1}\\cdots,i_{k}}(x) & =\\frac{\\left(x-x_{i_{0}}\\right)P_{i_{1}\\cdots i_{k}}(x)-\\left(x-x_{i_{k}}\\right)P_{i_{0}\\cdots i_{k-1}}(x)}{x_{i_{k}}-x_{i_{0}}}\n",
    "\\end{aligned} $$ \n",
    "利用数学归纳法可以证明 $$ P_{i_{0}i_{1}\\cdots,i_{k}}(x_{i_{j}})=f_{i_{j}},j=0,1,...,k. $$\n",
    "具体的操作可由如下的三角形表格给出 \n",
    "$$ \\begin{array}{c|c|ccc}\n",
    "x_{k} & k=0 & 1 & 2 & 3\\\\\n",
    "\\hline x_{0} & P_{0}(x)\\equiv f_{0}\\\\\n",
    " &  & P_{01}(x)\\\\\n",
    "x_{1} & P_{1}(x)\\equiv f_{1} &  & P_{012}(x)\\\\\n",
    " &  & P_{12}(x) &  & P_{0123}(x)\\\\\n",
    "x_{2} & P_{2}(x)\\equiv f_{2} &  & P_{123}(x) & \\vdots\\\\\n",
    " &  & P_{23}(x) & \\vdots\\\\\n",
    "x_{3} & P_{3}(x)\\equiv f_{3} & \\vdots\\\\\n",
    "\\vdots & \\vdots\n",
    "\\end{array}$$\n",
    "上图中k=0的一列对应于原始的节点函数值。$k=1$的一列中的各个函数可以通过它的左方一列中上下相邻的两个元素,如\n",
    "$$\n",
    "\\begin{aligned} & P_{01}(x)=\\frac{\\left.\\left(x-x_{0}\\right)P_{1}(x)-\\left(x-x_{1}\\right)P_{0}(x)\\right)}{x_{1}-x_{0}}\\\\\n",
    " & P_{12}(x)=\\frac{\\left.\\left(x-x_{1}\\right)P_{2}(x)-\\left(x-x_{2}\\right)P_{1}(x)\\right)}{x_{2}-x_{1}}\\\\\n",
    " & P_{23}(x)=\\frac{\\left.\\left(x-x_{2}\\right)P_{3}(x)-\\left(x-x_{3}\\right)P_{2}(x)\\right)}{x_{3}-x_{2}},\n",
    "\\end{aligned}\n",
    "$$\n",
    "然后可以进一步获得$k=2,3,...$的各列。该方法的好处是，当增加一个节点时，只需要重新计算这个图的右下角的一个边上的数据。例如需要加上第五个节点 $x_{4}$，只需要在图中 $\\vdots$ 填入相应的数据。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### 样条插值\n",
    "\n",
    "利用样条函数(spline function)来进行插值。  \n",
    "\n",
    "考虑一个区间 $[a,b]$上有n段分割： $a=x_{0}<x_{1}...x_{n-1}<x_{n}=b$。在区间内部的那些点 $x_{1}...x_{n-1}$称为节点(knots)。\n",
    "  \n",
    "考虑在该区间上的一个三次样条函数(cubic spline function) $S_{\\Delta}$，满足 $S_{\\Delta}\\in C^{2}[a,b]$并且在每个子区间 $[x_{i},x_{i+1}]$上均为一个三次多项式，并且在每个节点处的函数值以及一二阶导数都连续。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "* 例题：试对函数形式 $$ f(x)=\\frac{1}{1+25x^{2}} $$的一些离散点进行拉格朗日插值。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "from scipy.interpolate import interp1d\n",
    "from scipy.interpolate import barycentric_interpolate \n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "x = np.linspace(-1,1,10)\n",
    "data = 1/(1+ 25 * x**2)\n",
    "new_x = np.linspace(-1,1,100)\n",
    "\n",
    "f = interp1d(x,data,fill_value=\"extrapolate\")\n",
    "interp_data = f(new_x)\n",
    "f = interp1d(x,data,kind=\"cubic\",fill_value=\"extrapolate\")\n",
    "interp_data2 = f(new_x)\n",
    "\n",
    "interp_data3 = barycentric_interpolate(x,data,new_x)\n",
    "\n",
    "new_x = np.linspace(-1,1,100)\n",
    "plt.plot(x,data,\"o\",label=\"data\")\n",
    "plt.plot(new_x,1/(1+25*new_x**2),\"-\",label=\"f(x)\")\n",
    "plt.legend()\n",
    "plt.show()\n",
    "\n",
    "plt.plot(x,data,\"o\",label=\"data\")\n",
    "plt.plot(new_x,interp_data,\"-\",label=\"linear\")\n",
    "plt.legend()\n",
    "plt.show()\n",
    "plt.plot(x,data,\"o\",label=\"data\")\n",
    "plt.plot(new_x,interp_data2,\"-\",label=\"cubic\")\n",
    "plt.legend()\n",
    "plt.show()\n",
    "plt.plot(x,data,\"o\",label=\"data\")\n",
    "plt.plot(new_x,interp_data3,\"-\",label=\"lagrange\")\n",
    "plt.legend()\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### 函数近似\n",
    "\n",
    "Chebyshev 多项式是个好东东。它可以用来近似很多的函数。甚至是一些初等的函数，都可以利用 Chebyshev 进行展开和计算。\n",
    "\n",
    "对于任意的 $x\\in[-1,1]$，我们可以定义 n 阶的第一类Chebyshev多项式  $T_{n}(x)$，它可以明确地写为\n",
    "$$\n",
    "T_{n}(x)=\\cos(n\\arccos x)\n",
    "$$\n",
    "对于最低的几个多项式，我们很容易写出它的明确表达式\n",
    "$$\n",
    "\\begin{aligned}T_{0}(x) & =1\\\\\n",
    "T_{1}(x) & =x\\\\\n",
    "T_{2}(x) & =2x^{2}-1\\\\\n",
    "T_{3}(x) & =4x^{3}-3x\\\\\n",
    " & \\cdots\\\\\n",
    "T_{n+1}(x) & =2xT_{n}(x)-T_{n-1}(x)\\quad n\\geq1\n",
    "\\end{aligned}\n",
    "$$\n",
    "Chebyshev多项式满足正交归一性\n",
    "$$\n",
    "\\int_{-1}^{1}\\frac{T_{i}(x)T_{j}(x)}{\\sqrt{1-x^{2}}}dx=\\begin{cases}\n",
    "0 & i\\neq j\\\\\n",
    "\\pi/2 & i=j\\neq0\\\\\n",
    "\\pi & i=j=0\n",
    "\\end{cases}\n",
    "$$\n",
    "Chebyshev多项式在$[-1,1]$中有n个零点，其位置为\n",
    "$$\n",
    "x_{k}=\\cos\\left(\\frac{\\pi(k+1/2)}{n}\\right),k=0,1,\\cdots,n-1\n",
    "$$\n",
    "而在$[-1,1]$之间有n+1个极值点，其位置为\n",
    "$$\n",
    "x_{k}=\\cos\\left(\\frac{\\pi k}{n}\\right),k=0,1,\\cdots,n\n",
    "$$\n",
    "在这些极值点处，多项式恰好等于1或者-1。即Chebyshev多项式绝对值 $\\le1$。这个特性使得它成为近似任意函数的有力工具，因为它可以很好地控制误差。\n",
    "\n",
    "最后一个重要的性质是分立版本的正交归一关系。设 $x_{k}$为$T_{n}(x)$的n个零点，那么对于 $i,j<n$,我们有\n",
    "$$\n",
    "\\sum_{k=0}^{n-1}T_{i}\\left(x_{k}\\right)T_{j}\\left(x_{k}\\right)=\\begin{cases}\n",
    "0 & i\\neq j\\\\\n",
    "n/2 & i=j\\neq0\\\\\n",
    "n & i=j=0\n",
    "\\end{cases}\n",
    "$$\n",
    "利用上面正交关系可以证明，对于任意定义在 $[-1,1]$上面的函数 $f(x)$,可以构建N个系数 $c_{m}$\n",
    "$$\n",
    "c_{m}=\\frac{2}{N}\\sum_{k=0}^{N-1}f\\left[\\cos\\left(\\frac{\\pi(k+1/2)}{N}\\right)\\right]\\cos\\left(\\frac{\\pi m(k+1/2)}{N}\\right)\n",
    "$$\n",
    "然后可以用下面的式子来近似表达目标函数$f(x)$\n",
    "$$\n",
    "f(x)\\approx\\frac{c_{0}}{2}+\\sum_{k=1}^{N-1}c_{k}T_{k}(x)\n",
    "$$\n",
    "容易证明，在 $T_{N}(x)$的零点处这个表达式是严格的。即使不在零点处，该表达式也给出了函数 $f(x)$的一个非常好的近似。\n",
    "\n",
    "chebyshev给出函数的近似后，可代替该函数使用。比如用于对函数的积分、微分。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYIAAAD4CAYAAADhNOGaAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAACeFUlEQVR4nOydZ3ib5dmwz1vTe++9HWcvQtgJewQCBUqAsgmjdO/Svn37tuVraUsXbdl7b8IIJARCFpDt2EmceNvx3kvW1v39kOXYsWxLluQRdB6HD9vPcy8nkq7n2kJKiR8/fvz4+fqimOoD+PHjx4+fqcUvCPz48ePna45fEPjx48fP1xy/IPDjx4+frzl+QeDHjx8/X3NUU32AiRATEyMzMjKm+hh+/PjxM6PYu3dvm5Qy9sTrM1IQZGRksGfPnqk+hh8/fvzMKIQQNc6u+01Dfvz48fM1xy8I/Pjx4+drjl8Q+PHjx8/XHL8g8OPHj5+vOX5B4MePHz9fc7wiCIQQTwshWoQQB0e5L4QQ/xJClAshioQQi4fcu1gIcXTg3i+8cR4/fvz48eM63tIIngUuHuP+JUDuwNddwCMAQggl8J+B+7OB64UQs710Jj9+/Pjx4wJeySOQUm4VQmSMMWQ18Ly017z+SggRIYRIBDKAcillJYAQ4tWBsYe9ca7JpKapnoef/ZimgATMgVFeX19hMRLZVobSYqA3Ig19SJzX95gIQf09JDdXE9ndSoBBB0Kg1wbRGRHHscRsjNqgqT6izwkw2gjtt6E1SRQ2sCgFeq2gN1iBRSWm+ngIq5mwrhoCde0ImwVjQAQ9URlYNMFTfbSTjtlJYfzv5XOm+hhuM1kJZcnAsSG/1w1cc3b9VGcLCCHuwq5NkJaW5ptTekC/zkhmdSZtmUe8LgiCu+vJK3oNtVk/eK0xbTl1WSuQCqVX93KFQH0fiw5tY97RnSS21I46ziYE9QlZlGYtYO/cs+kPCpvEU/oWpVWS0G4lod1CsMF5Tw8JdIUqaIhR0R6uADG5QkFhMZFY+yXxx3ajshqHn00I2uPmUJe1AlNg+KSe62RESBuX697C2LcU8AuC0XD2DpBjXB95UcrHgccBli5dOu266WQmpALVxAR28de7T/Pauq01VbzyPw8RFBXBxd/+LWExsex69034ZD0XZIdx4V3fRUzSB4y1t5f2x5+g44UXkAYDAQvmE3rj1QQtXoQmMxNluP0DxdLZiamyCt3Orwj64gtSd7zN+bs/IOzyVcTccw+a1NRJOa8vkDbJoe0N7Hq/En2vmYSscHKWxpGUG0F4bCAqtQJjv4WOBh3HSjo4urOJyCojsWmhnL0mj4SsyfnQba4s54N/PkhXUyO5p57O/HMvIiEnH6VaRUd9HSU7tnBgw4ckdldw8b3fJ2/5mZNyrpMSfSe8+21oWg/hSuCGqT6R20yWIKgDhr77U4AGQDPK9RmHNkgFCklnVy/1ffUkhyR7vKbNZmXDo/9CHRDAmt8+SEhUNADn3/ltAkJC2fnOa8RnZrPwoss83ms8dF99RcMv78fS1ETYZZcRvXYtAfl5Tseq4+JQx8URvPxU+P73MVZU0PHCC3S/u46e9z8geu1aotfeiSIgwOfn9ia6biOfPH2Y+qOdJOVGcNm3c4jPHKnlBIZqSM7XkJwfybLLMynb3cxX6yp5+y97WXRhOqdekYlC6buAverCvaz72/8jMDSMb/7vH0mdPW/Y/fisHOKzclh88eV88M8Hef/vf2LlrXez+JLLfXamk5aGQnj9Zuiph4sfhFPvnuoTTYjJCh99D7h5IHpoOdAtpWwEdgO5QohMIYQGWDMwdsYhhCAgREWgOZRPqj/xypoHPvmI5soyVt6ydlAIODjjmzeSPn8RW19+lr6Odq/s5wxpNtP8xz9Re+ttKLRaMl59heS//mVUIeAMbXY2ib/9LdkbPib0/PNp+89/qLxiNfpip0Fm05KWmh5e/3+7aa7qZsWN+Vz5o0VOhcCJKJQK8pcncv1vTmXW6Yns21DDe/86gLHf7JNz1h4s4t2//J7IxGRufOBvI4TAUMJi47jut38i55TT2PzsYxR9+rFPznRSIiXsfRaeuhBsFrjtI/6u1vNJ7aapPtmE8Fb46CvAl0C+EKJOCHGHEOIeIcQ9A0PWA5VAOfAE8G0AKaUF+A6wASgBXpdSHvLGmaaCkPBA4kQCG2s2eryWzWpl93tvkTxrNvmnnz3ivlAoOP+Ob2OzWtjy4tMe7+f0DP39HPvOd+h47jkib7iBzHfeJnDBggmvp46PJ/lvD5H27DNIs5maG26g48WXmO59s4+VdPDO3/ajVCm4+mdLmXNWstvmOE2ginNvKuDcmwtoLO/inYf2oes2jj/RDdrraln3198TkZDEtf/zAMERkePOUarUrPrBz8lcuIRPn3qEY4eKvHqmkxJTP7x7L7z/fUg/He7eSntMNs8eepYjHUem+nQTwiuCQEp5vZQyUUqpllKmSCmfklI+KqV8dOC+lFLeJ6XMllLOk1LuGTJ3vZQyb+DeA944z1QRGKohRiRQ3FZMQ59nFq6yXV/S29bKklVXjfqhE5GQyNJV3+DIji201lZ7tN+JWDo7qbntNnTbtpPw29+S8Jv/QREY6JW1g5cvJ/Pttwg6/TSa//AHGn/xC6TZN0/IntJY0c36/xYRHhPA1T9bQkxKiEfrFZyeyKrvLKC7zcD7XtQMTPp+3nvo/6HSaLn6/t8RGBLq8lylSsVl3/8ZEQlJfPDPP9Pf0+2VM52UtJXDk+fDgVfhnF/At96C4Bg+rf0Um7RxUcZFU33CCeHPLPYigaFqAs32D4pPajwzD+376D3C4xPIXrJszHFLVl2JOiCQne+87tF+Q7H29VF7+x0YS46Q/M9/ELnmOq+t7UAVGUnqI48Q893v0L3uPY7d+21sOp3X9/GE9vo+PvzPAYIjtVzx/UUEh2u9sm5qQRSX3jOPziYdH/63CLPJ6vGanz3zGJ2NDaz6/s8IjY5xe742KJhVP/g5Rl0fGx97eNpraVPCoXfh8RXQ2wg3vgkrfwkDUXsbqjeQGZ5JbkTulB5xovgFgRcJDNVg0kkKogrYWD1x81B3SzMNRw8zb+WFKMYJDw0MCWXhhZdS+uV2Ops897NLk4n6730fY2kpKf9+mLALLvB4zdEQCgWx991Hwu9/h+6LL6i55VasXV0+288dejsMvPevQlRqBVd8byFBYRqvrp9aEMUFt8+hsaKbjU8cxGab+Advxd6dHNryKcuuvJbUOfMnvE5sWgZnrLmZij1fUbbriwmvc9JhNcPH98Mbt0BsPty9FXLPH7zdpm9jT/MeLsq4aNIi+LyNXxB4kaBQDRajlQuSL6KorYjGvsYJrVO6cwcA+aed5dL4xZeuRigERZs8c/ZJKWn8n9+g++ILEn//e0LOHumb8AWR115Lyr8fxnj0KLVr78La1zcp+46G1WJjwxMHMRutXP69hYTFeMckdiI5S+I4+7o8qovb2ftR9YTWMOn72fTkf4lNy+C0a9Z4fKYll64mNiOLzc8+jknf7/F6M57uenj2MvjqP7DsbrjtI4gYHv68qWYTNmnjvMf20fHCi1N0UM/wCwIvEhCiBuDsqJUAE3Yal361nfisHCISEl0aHxIZRfbSUzn4+SYsJtOE9gToeOZZutetI+Z73yXiG1dNeJ2JEHruuST/858YSko4dvc92Pqn7kPoy3cqaK7qYeW3ZhGd7JlPYDzmnpNM/qkJ7PqgimNHOtye/+Vbr9LX0c75a7+DUqX2+DwKpZLz7/g2fR3t7H7/bY/Xm9FUbIbHzobmQ3DN03Dpn0E1UjPcUL2B3JAs5NadWNrbpuCgnuMXBF4kKNT+IomQMXbz0AQEQU9bK03lpW4n+Cw4/1IMvT2UDWgT7qIvKqLlb38j9ILzibn33gmt4Smh564k+S9/Rr9/P3Xf/d6UOJAr97dy4NNjzFuRQu7SeJ/vJ4TgnBvyiUwI5pOnDqHrcj2SqLOpgX3r1zF35QUk5c3y2pmS8maRf9pZ7PngHXRdnV5bd8Zgs8GWP8MLV0FwDKzdDHOvdjq0tb+Vvc17uSLwVLBa0WZmTvJhvYNfEHiRwAFBoO81cWHGhRS1um8eqineD0DW4lPcmpc2dz7hcfEc2vqZW/MArD091P/ox6jiYkn8wx+m1M4ZdsklJP7u/9Dt2EHTHx6YVKelrtvIZy+UEJceyhlX50zavmqtkovXzsVstPLZ8yUu/81fvvEyCqWKM9fc7PUznbHmJmwWC1++9arX157W9HfAy9+EzQ/AvGth7WcQO3rOzCc1nyCRnGHJAECTkTE55/QyfkHgRQJD7ap5f6+JC9MvBNw3D9UUFRIcEUl0inv1lIRCQcGZK6gtPuD2U1zTb3+LubGR5IceGiwTMZVEXHMN0WvvpOu11+h47rlJ23fba6VYTDbOv202SvXkvjWikoI57apsag/by1KMR1ttNSU7trDo4lUu5Qu4S2RCEnNWnM/BzRt9mrA4rajbazcFVW2By/4G33gcxinMt7FmIzkROUS1GgC/IPDDcI0gLSyNWVGz3BIE0maj9uAB0uYtnNBT+awzVyCljSM7tro8p/ezzfSs/4iY+75N0KJFbu/pK2J/+ENCL7iAlgf/TN+WLT7fr2J/CxX7WjllVQaRCVNTlXPeOSkkZoez/fUy+nvG9vXseP0lNAGBnHKFc5OFN1i2+lpsVit7PnjHZ3tMC6SEXU/A0xcBAm7/GE65Y9wigS39Lexr3seFGRdiqq5CGRU1LR6kJoJfEHgRtVaJSqtE32u3bV+YbjcPNenGf8IDaK2tRt/TTfq8hRPaPzo5lfisHEq2f+7SeJtOR9Pvf482N4eYO++c0J6+QigUJP35QbT5+dT/7OeY6up9tpdBZ2brK6XEpIaw8IKpq2wrFIKVN83CbLKy9dXSUcc1VZRRvvtLllx2JYGhvqvoGhGfwKwzzqFo08cY+6dXjofXMPbBW3fC+p9A9kq4ewskL3FpqsMsdFH6RRirqrBlzcZi9jwnZCrwCwIvExSqRt9rf5q7MMNuHtpQvcGluY70/rS5Ey/jkLf8TJory+hpaxl3bOu//oWlsZGE//sdQuPdOHlvoAgMJOWf/wCrlfof/ACbBxFRY7HzvUr0fWbOvakApQ+LwblCZEIwp1yWScW+FmoPOTfJfPnWKwSEhLLksit9fp4ll67GbDRwaIv7vqdpT+tReOJcOPQ2nPs/cP1rEOR6CfmN1RvJjcwlKyILU3UN20OvZtvrZT48sO/wCwIvExiqQd9n1wjSw9IpiCrg4yrX4vsbSo8QFhs3ocxQB7nL7CWwy3d9OeY4/aFDdLzwIhFrriNo8fQxCZ2IJj2dpD/9EcPBgzT/8Y9eX7+9oY9D2xqYc1YSsWmul2XwJYvOTyMsNpDtb5Zjs9qG3etoqKdy7y4WXrQKbZDvm/7EZ+WQmJtP4YYPkDbb+BNmCsVvwuMrob8dbnoHzv4JKFz/OGzWNbOvZR8XpV+EtbcXS1s7JqkejBycafgFgZcJDNUMagQAl2RewsH2gxzrOTbGLDuN5UdJzMn3aP/IxGRi0jIoG0MQSClpefDPKCMiiPvRjzzabzIIPf98om6/na5XXqX300+9uvYXb5aj1ipZdvn0CftTqhWc8Y0cOht1HNo2PFt83/p1KFUqFl546aSdZ9FFq+hsrKfm4IFJ29NnWIzw4Y/hrTsgYR7csw2yVri9jKOEzIUZF2KqqsKsDkEivJ6BPln4BYGXCQxVox/i6Ls4w97K+aPqj8ac19fRTm9bK4m5nseD55xyGnVHDo1aPEy3dSv9u3YRc9+3UYbNjK5hcT/4PtrZBTT++n+wtLZ6Zc2ag+3UHu7glMsyCAyZXm/gzIUxJOdFsOv9qsHCdPq+Xg5t+ZRZZ67wSaTQaOQuP5Og8AgKN3wwaXv6hK5aeOYS2P0knPYduPUDCEua0FIbqjeQH5lPZngmxopKTBq7Nhno1wj8gEMjMA/GgieGJLIobhEfVY0tCBrLj9rH53qmEQD2QnVSUn1g34h70mql5a8PoU5PI/Kb3/R4r8lCaDQk/+Uv2Pr7abj/Vx7nF9isNna8WUZ4XCDzVqR46ZTeQwjBGdfmYug3s2d9NQBFn3yExWScFN/AUFRqNfPOvYjKvbvpbmme1L29Rtkn9tDQtjL45gtw0QOgnFgmdmNfI4WthYM+QFNlJaZAu2D2awR+AHt2sc0mMfZbBq9dknkJ5V3llHWO7khqLDuKUqUiLjPb4zPEZ2YTGBZOdeHeEfe6312HsayMuB/+CKH2vCTBZKLNzibu5z9Dt20bnS+/7NFapbub6Wzq57SrslGqpufbIDY1lFmnJlC8pZ6etj4KN3xA2ryFxKZlTPpZFlxwCQDFn3nea2NSsVnhswfgpWshLBnu+hxmX+HRkg7t/pJM+7+JsbISa6LdtOgXBH6A40llQ/0EF6ZfiFIox9QKmspLiU3PROWFD2ehUJCxYDHVB/YNc/DZTCZaH37Y3mv4ogs93mcqiLz+eoLPOIOWh/424ZBSq9XG7g+riUkNIWthrJdP6F2WXpaJtEo+e249fZ0dLLl09ZScIzQ6hvQFiyjZ/vnMcRrr2uDFb8DWP8PCG+COTyDa8wetj6o+Yn7MfFJD7cXnTBUV2GLtPwd+nQWBEOJiIcRRIUS5EOIXTu7/VAhROPB1UAhhFUJEDdyrFkIUD9zbM3L1mcXxpLLjdXKiA6M5NfFUPqr6yKlJQ0pJS00lcRmev0gdZC5YjL63h+bK8sFr3W+/g6Wpibjvf3/GlssVQpD4u/9DAE2/+c2ETERHv2qip1XPssuzpv2/Q3hsILNOT6Rq/xZComLIWLh4ys4y+8wV9LQ2U3/08JSdwWVqd8KjZ0HNl3DFw3Dlf0HjeZRVRVcFRzqOcGmW3VkvTSZMx45hjohHqVKgCRi7bPx0xWNBIIRQAv8BLgFmA9cLIWYPHSOl/IuUcqGUciHwS2CLlHJoqcWVA/eXenqeqWZodvFQLs64mLq+OorbikfM6W1vxajTEZvuvciV9AWLQQiqBsxD0mKh/cknCZg/n6DTTvPaPlOBOjmZ2J/8GN0XX9D9tnsVMq0WG3s+rCYuPZSMedHjT5gG5J4SgM1cQ2js4nH7U/iSnFNOQ60NoGTb51N2hnGREr78Lzx7qb1S6J2fwGLv1WJaX7UehVAMdiIz1dSA1Yo5MAKz7p0Zm4XtDY1gGVAupayUUpqAV4Gx9NfrgVe8sO+0xJlpCOC89PNQK9ROzUOtNVUAXhUEQWHhJGTlUHXALgh6PvwQc10dMffcPe2fgl0hcs0agpYupflPD2Jpc730b8kXjfR2GFh2xfTXBhzUHNgOCDpb0ulp10/ZOdQBAeQsO42jX23DMh1bixp67M1jNvwSci+Cu7ZA4sSTM09ESslHVR+xLGEZMYH2XB9jpf29a1IEYzbUout0v5T4dMAbgiAZGBokXzdwbQRCiCDgYuCtIZclsFEIsVcIcddomwgh7hJC7BFC7Gn1UvigL3D0JOjvHf5GCdOEcVbyWWyo3oDVNjwNvbXaIQgyvHqWjIVLaSorpb+nm7bHn0Cbl0fIihVe3WOqEAoFCb//HTaDgZa//MWlOTarjf0ba4jLCCNttusZpFOJzWbl4OZPSJ2zEIUyjMJN4+ej+JLZZ67AqNNRtW/3lJ5jBM2H7G0kSz6AC34Ha16CwAivbnGw7SDHeo9xaebxHA5TZQUAeosCaTOjDZqaOlWe4g1B4OyxajTD7eXAjhPMQmdIKRdjNy3dJ4Rw2hZLSvm4lHKplHJpbOz0dfAplQq0wSoMvSPLIVySdQmtenv98qG01lQRHp+AJtC7maKZC5cgpY2jL72AqaKC6LvvQriRPTnd0WZmEn377XSve4/+3eN/MFXsb6WnzcDii9JmjDZQfWAffR3tLLroEvKWxVOyvQF9n29KbbhC2ryFBEdEcnjb5ik7wwgKX4EnzgNTH9zyPpzx/XELxk2E9VXr0Sg0nJ9+vE2lsaISVVIi/T32WkyTke3tC7zxqVAHDO3dlgKM1jx3DSeYhaSUDQPfW4B3sJuaZjRBoZoRGgHAOSnnEKgKZH3V+mHXW2uriEvP8vo5EnJyCQgJpeLzT1GnphJ28cVe32OqibnnblRJiTT97vdjNrKRUrJ/Yy0R8UFkLpi+DxInUvzpRoLCI8hacgqLLkjHYrZxcIvvCvCNh0KpZNYZZ1O5bzcG3dS2FMVsgPe+B+/eAylL4e5tkHGGT7ay2qx8XP0xZ6ecTajmeCkSY2UFmqxs9H12QaD5GmsEu4FcIUSmEEKD/cP+vRMHCSHCgXOAdUOuBQshQh0/AxcCB71wpinlxDITg9dVgaxMXcmm2k2YrfYPLbPJSGdTIzE+iA1XKJQkp2bQbOon4obrEcqZGdEwForAQBLuvx9jWRkdL7006ri6o5201vay8PxUFIqZoQ3o+3qp3LebgjNXoFSpiUoKJmN+DEWb6zCbpq7KZd7yM7FZLVNrHuqogqcugH3PwZk/hJvehVDfdZTb3bybNn3bYO4A2MvGm6qqIT0XabX3I/jaagRSSgvwHWADUAK8LqU8JIS4Rwhxz5ChVwEbpZRD69nGA9uFEAeAXcCHUkrPOrBPAwKHVCA9kUszL6Xb2M2XjfZaQJ0N9SCl241oXCWipR2DRo3i7LN8sv50IOS88wg+52zaHv435mbnVVf3b6wlMExD/vKEST7dxCnbuQOb1ULBmSsGry26MA1Dn5kjX7jX+c6bJObkExwZRdnusQsb+owj6+Hxc6CrBq5/Fc7/LShVPt1yfeV6gtXBnJ1y3HJtaWxE6vXYErNA2luMfp19BEgp10sp86SU2VLKBwauPSqlfHTImGellGtOmFcppVww8DXHMXemExiqGbWxyOlJpxOmCePDyg8B6Ki3O/+ikr1f5sDS0UHwLrs/oqG2yuvrTxeEECT86ldIs5mWBx8ccb+tro9jhztYcG4KKvXM0YpKtn9OZFLKsGzzxOxwErLCKNxUi802eW08hyIUCnKWnkpV4V7MJtd7LHuM1QKf/C+8ej1EZtijgvIvGXeap5isJjbVbOK8tPMIUAUMXjdWVtqPFZOMPWDyay4I/AwnOFyDsd+C1TwyA1OtVHNRxkVsPraZfnM/HQ11CKEgMmFixa/Gouv1Nwju6ycwOIRjh0fmL5xMaNLSiL7zTnrWr6d///5h94o/r0OlVjDnLKfBbNOSnrZW6koOUXDGOcMc20II5p+bSk+bgZqDU9dCMueU07AYjdQUFU7Ohr3N8Pxq2PEPWHIr3L4RoianYuy2+m30mnuHRQsBGCvsEUPmsNhBjUDzdTUN+RlJUJgWsPcudsaqrFXoLXo21W6io76O8Lh4VF5uDCMtFjpffZWQ008jdd5Cjh0qntRG8FNB9J13oIqNpeVPDw7+rQadmdKdTeQtiycgeObUVjr65TaQkllnnjPiXtaiWIIjtBRvnrpQ0tQ589AGBY/b98IrVG+Hx86C+r1w5aNw+T9BHTD+PC+xvnI9UQFRnJp46rDrpsoqlBERGG0apN805OdEHIWn+rudC4JFcYtIDknmg4oP6Kg/5hOzUN/WbViamoi84QZSZ8+jt7115laOdBFFUBCxP/g++gMH6P3Y7moq2dGIxWxj3srUcWZPL0q2f05CTp5TTVGpVDD37CSOlXTS2TQ1LSSVKjVZi0+hYt8ubFYfOa6lhO3/gOeuAE0IrP0UFl7vm71GQWfWsaVuCxdlXIRKMdwPYY8YyqK/x4QQDtOQXyPwM0BQ+IAg6HFuPxVCsCprFbsad9LRWE9kkvcFQdfbb6GMiSHknHNInTMPgGOHi7y+z3Qj/Mor0ebn0/LQ37AYjBRvqSMpN4KYlJCpPprLtNfV0lpdScEZI7UBB7PPTEahEhRvrpvEkw0nZ9lpGHp7qCs55P3F9V3w6g2w6X+hYJW9amj8HO/vMw6bajZhtBpHmIUATBWVaLOz0PeYUKktqDRalKqZo3UOxS8IfIDDNKQbRSMAu3kosF+B1WwmOtm7T6uWtjb6Pt9C+OorEGo1UcmpBIVHcOzQye0nABBKJXE/+ynmujoO/+cdetsN07LfwFgc/XIbCEH+6U5zKwG71pm7JJ4jXzVh0ltGHedLMhcsQaXWUO7t6KHGA/aooLKNcPGf4NrnIGBqGii9X/E+aaFpLIgdXqrC0tmJtbMTTVY2/b0mFErzjNUGwC8IfEJgmBoEo0YOAWSEZ7BAmQNAZJJ3nZjd694Di4WIb3wDsGsgKbPncezwye8nAAg54wyCzz6LQ3u7CA5Tk7Vw4j2gp4KynV+QMmvOuF3I5q1MwWy0cuSrpkk62XDUAQGkzp1P1X4vFQ2WEvY+B09eABYT3Loelt/rkyxhV2jSNbGraRersleNyEQ3DTiKtdl205BCYZ6xyWTgFwQ+QalUEBiiHlMQACzR2Iu0dgYavLa3lJKut98mcOFCtNnHww5TZ8+jr72Nruapiz+fTILu+iEdYXmkU4lCOXNe5h0NdbQdqyH31NPHHRufEUZsWiiHt9dPmYDPXLiEruZGOptGKybgIqZ+WHcfvP89SD/N3ks47dTx5/mQDyo/QCJZlbVqxD1H6KgmK9vemlYY/RqBn5EEhWno7x47xjrFGo1ZaWNjy+de21dfWIipooKIa64edj119lwA6o/MgFryXqC8XgNIIj59EnP91JVkcJeynV8AkLtsfEEAMPvMJNrrdTRX9/jyWKOSudBeOb5q/8hueC7TXmHPEi58Gc75OXzrbQieWi1OSsn7Fe+zOG7xYAOaoZgqKhEBAagSEujvNSNtphkbMQR+QeAzgsJGTypzYGjrxBauZX31+hEVSSdK99vvIAIDCb14eKJNVFIKAcEhXwtBYLPaKPmikbTcUALNPbT+579TfSSXKd25g8ScfEKjXfsgzDslHpVGweHtHj6RT5CIhEQiE5OoLpygeejwOnjsHOiphxvfhJX3wxT2XBg8VvthKrsruTz7cqf3jZWVaDIzMRqsSJtEWg1ovVw0cjLxCwIfERSuHTV81EFXcxMxiam09Lewu9nzui02k4meDRsIveB8lCHDn06EQkFSfgENM6G7lIdUF7fT321i7vmZRF5/Pd3vvjuoyk9nupqbaKmqIHe564XTNIEqck+Jp2x385Q5jTMWLuHYoWL3soytZvj4fnj9ZojNsxeMyz1//HmTxPuV76NRaAYb1J+IqaIC7UDoKIDVYvD7CPyMJChMg67HOKrtVtpsdLc0kZ0xlxB1CO9XvO/xnrrt27H19BB+2WVO7yflFdDRUIe+d2rMCJPF4R0NBIdrSJ8bTfTdd6EICKD1Xw9P9bHGpWyX3SyU54J/YCizz0zCYrJRuntq8kQyFy7FYjZRd9jFepE9DfDsKvjqP7DsLrjtI4iYPnkeZpuZ9ZXrWZG6gjDNyGglm16PuaEBzUDoKIDFpPf7CPyMJChMg80iMfY7f0rr6+zAajYTk5jCBekXsKlmE3qLZ92nej74EGVEBMGnO/8gSZ5ld043lJZ4tM90prfDQO3BdgrOSEKhVKCKiiLq1lvo/fhjDIentzZUtnMHcRnZhMe5VxgvPiOM6OSQKTMPpcyei0qtocoV81Dl5/Zewk3FcPVTcOlfQKX1+RndYUf9DjqNnVyRfYXT+8YKu3apzcmhv9eElFYsJqPfR+BnJMHhA2UmRjEPOaJ3wuMTWZW1in5LP5trJ97sw9bfT+/mzYRedBFC7TypJT47F4VSRf3Rk1cQHN3ZhJRQcHri4LWo225DER5Oyz//OYUnG5u+zg4ay46Su8z9ftJCCGafmUhrbS9tdZPfI0Ct0ZIyZx7VhWM4jG022PoXeOEqCIqGuzbDvGsm75Bu8F7Fe0QFRHF6svMHKmNZGQDa3Fz0PWaQMzurGPyCwGcMlpkYJbvYIQgi4hNZmrCU+KB43q+cuHmo97PNSL2esMtGZkA6UGu0xGdln7QOYyklR79qIik3grCYwMHrytBQou+8A92WrfTv9SC6xYc4YvGzlkysL1PuKfEoFIKjO6cmpyBz4RI6GxvoanISntzfAa9cB5/9AeZeDWs/g9j8yT+kC3Qbu9lybAuXZF6CWuH8gcpYVobQaNCkpdHfY0Qo7ILA7yPwM4LjZSacawTdzU0olErCYmJRCAWXZ1/OFw1f0NLvvJ7+ePR8+CGq+HiCli4dc1zyrDk0V5ZNz+bjHtJS3UtXc7/TngNR3/oWytgYWv/5ryk42fhU7N1FaHQssekTq6gZGKIhfV40pTubsFlHVr31NenzFwFQe/DA8Bv1e+1RQZWfw2UPwTeeAO30LfexsWYjJptp1GghsAsCTXY2QqlE12UiINj+7+3XCPyMICh87DIT3S3NhEbHoBjoGrY6ezU2aZuQ09ja1UXf9u2EXXLJuD2Jk/ILsJrNNFeWu73PdOfoV40o1QpyFseNuKcIDCT6jjvo37Vr2mkFFpOJmuL9ZC1Z5lEv5fzlCfT3mKg70unF07lGVFIKIZFR1DgEgZSw6wl4+mJAwu0fwyl3TlmWsKu8X/E+WeFZzI6aPeoYY1kZ2lx7VQBdtxFtoF0QBARPXwE3Hl4RBEKIi4UQR4UQ5UKIXzi5v0II0S2EKBz4+o2rc2cqmgAlSrViVI2gp7WFsJjjH1gZ4RksilvEu+Xvup0l2vvZZjCbxzQLOUjOKwA46cJIrRYbpXuayVoYiybQebeqyOuuQxkdTdt/H5nk041N7aEDWIxGsidoFnKQMTcGbZBqSkpOCCFIm7uAYwcPIPU98PZaWP8TyDwH7t4KyUsm/UzucqznGPtb9nN59uWjCmRrTw+Wpia0ubmA/UFPrbXnAGm/zoJACKEE/gNcAswGrhdCOBOn26SUCwe+fufm3BmHEGIgqcy5j6CnvZWw2OFPrlfmXEl1TzUHWg84nTMavZs2oUpMJGDu3HHHBoVHEJmYRP1JJghqDrZj1FnGbEWpCAwk+vbb0O3Ygb6wcPIONw6Ve3ej1gaQOnueR+so1Qpyl8ZTVdg6JTkFafMWou/toe1fF0Pxm7Dy13DD6xAUNelnmQjvVb6HQDgtKeHAWG7XpB2CoL/biEptf9j7umsEy4DygbaTJuBVYPUkzJ32BIdrnEYNWS0WdB0dhMbEDrt+UcZFBKoCebf8XZf3sPX3o9uxg9DzznPZrJCUN5uG0iMnVQG6I182EhSmIXXW2IXaItesQRkRQesj00MrkFJSuW836fMXeqU5Uf7yBCxmGxX7J+Zr8oRUpb0kdm2LGW56B875KYxjqpwuWG1W3i1/l9OSTiMhePSHCWOpPWIoIDcXi8mKsd+CQmX3t2mDv97O4mRgaKukuoFrJ3KaEOKAEOIjIYSjsLircxFC3CWE2COE2NPa2uqFY/ueoDCtU9NQX0cbUtqGmYYAgtXBXJB+AR9Xf+xyTkHftu1Io5HQ813PykzMzUff001P68nRqEbfZ6LmYDt5y+LHLTCnCA4m6rbb0G3Zir7YxQQoH9JaU0Vve+uEo4VOJD4zjPC4QI5OpnnIYoT1PyVs0/eIDJLURp4P2Ssnb38vsLNpJ026Jq7KvWrMccbychRBQaiSkgb9fwphQggFmoDAMedOZ7whCJw9hp74qLkPSJdSLgAeBt51Y679opSPSymXSimXxsbGOhsy7bAXnhspCHpa7U9rJwoCsJuHdGYdm2o2ubRH76ZNKCMiCFrqug02MdceutdQdtTlOdOZ8j0t2KyS/OWJ4w8GIm+8AUV4OG2PPurjk41Pxd6dIARZi07xynpCCGYtT6C+tIueds8SFF2i6xg8cwnsehxO+w5pp13MsbJyrJapKXcxUd4te5dwbTjnpp475ji7ozgXIQQ6R1FJaa88Ol6gxnTGGyevA4bmh6cAw1IcpZQ9Usq+gZ/XA2ohRIwrc2cyQeEaDDozVsvwcL6eNrtGE+ZEoC2JX0JySDLryteNu740mej7/HNCVq5EqJw7SJ0Rk5qOSqul6SQRBEe+aiI6JcTlLmTKkBCibr6Jvk8/xVAytcl1lft2k5idN27vAXfIW2Y3bZTu9LHGV7bJ3ku4tRS++Txc9ABp8xdhNuhprizz7d5epNvYzae1n3JZ5mVolGOb54xlZWgcEUNddkFgsxrQhsxc/wB4RxDsBnKFEJlCCA2wBnhv6AAhRIIYMGALIZYN7NvuytyZzPGksuFaQU+bXSMIjR4pCBRCweqc1exs2kl939jlk3U7d2Hr7SX0AveKdSmUShKycmk8CQRBV3M/LdU95J/qXlmGqJtuQhESQtsjU6cV6Lo6aSovJWuxd7QBB2ExgSTlRgxkWfvAD2Szwub/By9dA6FJ9jaSs+2uvdQ580EIaovdC3iYStZXrcdkM41rFrK0t2Pt6CBg0FHsKDinn9HlJcALgkBKaQG+A2wASoDXpZSHhBD3CCHuGRh2DXBQCHEA+BewRtpxOtfTM00XRisz0dPaSlB4xKjOwdXZqxEI3qsYWyb2btqECAoatbbQWCTm5tNSXTHjE8vK9jSDgNyl8W7NU4aFEXXzTfRu3IihtNRHpxubyn32irPe8g8MJW9ZPF3N/d4vOaFrgxevhi0PwoLr4c5NEJMzeDswNIy49KyRiWXTmHfK3qEgqoBZUbPGHDe0tATYcwgUKoHZ0D+jI4bAS3kEUsr1Uso8KWW2lPKBgWuPSikfHfj531LKOVLKBVLK5VLKL8aae7IwWhP7nraWEaGjQ0kKSWJZ4jLWla/DJp1niUop6du8mZAzz0QREOD22RJz8rFaLLRWT//yzKMhpaRsdzNJORGERLpfuCzq5ptRBAXR/uhjPjjd+HiaTTwWWYtiEQpB+R4vRg8d22UvGFfzBVz+L7jyv6AZmU2bOmcujWVHZ8RDRkl7CSUdJVyZc+W4Yx0RQ0MFQXCYFmO/bkZHDIE/s9injGYa6m1rJcyJWWgoV+ZcSX1fPXubnWfBGo8cwdLSQsiKFRM6m8Nh3Fh2ZELzpwMdDTo6m/rJWTK6UB0LZUQEkTfeQM/HH2OqrfXy6cbGajFTe/AAWYuXepRNPBqBIfZQ2rI9zZ6bh6SErx6xO4WVarhjIyy5ZdQs4eSCuVjMJporpr+f4N3yd1Er1FyW5bx0+1CMZWUow8NRxtibBum6TARHaDDo+tAG+TUCP6MQGKYBcdypBPan2N6ONkJjxu5AdV7aeYSoQ0bNKejbsgWAkLPOnNDZQqKiCYmOobF8aswi3qBsTzNCQLaTkhKuEnnTTQilkvann/biycan4WgJZoOejAW+y7jNWRpPb7uBlureiS9i6IE3boWPfwG5F8LdWyBp4ZhTkvPtOaF1JVMfnjsWRquRDyo/4Ly08wjXho873lB6FG1+/qDg7u82EhyuxajTEeB3FvsZDaVSQWCoZpggMPbrsBiNhERGjzk3UBXIxZkXs7F6I72mkW/kvi1bCZgzB5UHobRJOfkzViOQUlK+p4Xk/MhBzWsiqOPiCL/ySrrffgdLW5sXTzg2VQf2oVAqSZs732d7ZC2MQaESlO2dYPRQ8yF4YiWUvA/n/x+seRkCx49uCgoLJzoljboj09vdt/nYZnpMPVyVM7aTGEBarRhLy9DOOl41VddtIiBUOeN7EYBfEPickAgtfV3HTUN97fYPm5CosQUBwDW512CwGlhfuX7YdUtnJ/oDBwg55xyPzpaQm093SzP93V0erTMVtNb20t2qJ/cU95zEzoi6/Tak2UzHCy964WSuUV24l6T8AjQ+7HOrDVKTNjua8j0tSJub5qEDr8IT54GxF255D878gVsF41IK5tJw9DA2q3d6cfuCd8veJTE4kVMTTx13rPnYMaReT0C+XRCYjVZMegvaQHu+hN9Z7GdMgiO0wzSCvo52AEJcaE4+O3o2s6Jm8WbZm8PsvLodX4DNRsg5Z3t0tkE/QfnMCyMt39OCQiHIWuh5cqE2M5PQCy+k8+WXsfb5vrFLX2cHrTVVPjULOchdGoeuy0hjZbdrE8wGeP8H8M7d9kJxd2+FDPfNjykFczDp9bTWVLk9dzJo0jXxRcMXrM5ZjVKhHHe84Yj9PaLNt0cWOZLJ1BpHwTm/RuBnDEJOEAS9nXZBEOqCRiCE4JrcazjScYTD7ceLxPVt3YIyMtKlInNjEZ+ZjVAoZlw+gZSSsr3NpM6OIiDYefMQd4m+805svb10vfa6V9Ybi5qi/QBkLFjs870y5segVCsod6WfcWc1PH0h7H0GzvgB3LwOQt3Lz3CQXGCvIjNd/QTvlr+LRLI627XSZsbSo6BQDJaf7h8QBCq1PTLKrxH4GZPgCC0GnRmLyf7k4NAIgsfxETi4NOtSAlWBvFH6BmC3Veq2biP4rDMRyvGfZMZCrQ0gNj1zxgmC5qoe+jqM5C6duJP4RALnzSVo+XI6nnsOm8l56XBvUX1gH0HhEcT5IGz0RDQBKjLmRVO+vxXbWOahox/BY2dDRzWseQUu+D9Qup6tfiKhUTFExCdOS0FgtVl5q+wtlicuJyU0xaU5hiNH0WRmotAO7zMilANtKv0agZ+xCI5wvHDsTxB97e0EhoWjGqWv8ImEakK5OONi1letR2fWYSguxtrV5bF/wEFiTj5NFaXYbNPXlnsiZXuaUaoUZC7wbs2p6LV3Ymlpoec93yW322xWqov2k7Fg8aTVpslZEo++x0RDqZOGNVYLbPotvLIGItLtUUGzxu9r4QrJBXOoO3IYaZv8jmljsaNhB026Jq7Nu9blOcYjRwb9A3A8ElDgEAR+jcDPGIQ4BMHAC6evs90lR/FQrs67Gr1Fz0dVH9G3bTsIQcgZZ3jlfIm5+Zj0ejrq67yynq+RNkn53hbS50aP2oBmogSffjra2QW0P/W0zz68WiorMPT2TIpZyEH6vGjUWiVlJyaX9TbDC1fC9r/D4lvgjk8gyntaSkrBXAy9PbTXHxt/8CTyxtE3iA6IZmWaaxVSrb29mBsa0OYPjxhSqhTYBqoE+01DfsYkeCDjtW9AEPR2tLvkHxjK/Jj55Ebm8mbpm+i+/JKAuXNRRkR45XzHE8tmhnmoqbKb/m4T2Uu8X4FWCEHMnXdiqqqi99NPvb4+QNWBvSDEYI/fyUCtUZIxP4bKwtbj/Yyrd9hNQXV74MpH4Ip/gdr9DPWxSJnl8BNMnzDSJl0TW+u3clXuVaM2pz8R41H7eyNg1nCNIDhCg7FfB+APH/UzNg6NoK/TYRpqc1sjcDiNKxsOoj9QOKHaQqMRmZBEQHDIjMknqChsRaESZMwdP+pqIoReeCHqtDTan3zSJwXbqgv3EZ+ZQ1DY+AlM3iRrYSyGPjON5V2w45/w3OWgCbbXClp4g0/2DI9PICg8gsbSqa3wOpS3y95GSsnVuVe7PMcwIAi0s47XIurvsSeTGXR9qDRarzQVmkr8gsDHaAJVqLVKdF1GLGYz+t4etwUBwGVZl7GgTgVWG8Gnnea18wmFgoScPJpmQIaxlJLK/a2kFkR53SzkQKhURN92K4YDRej37fPq2oa+PhrLjpK5cPLMQg7S50ajUgsqXn8JPvkNzLrMXjU0wbPIs7EQQpCUV0BD6fR4yLDYLLxV9hanJ53uspMYwHjkKMrwcFRxx4MTdF0mgsK1GPp6Z3xWMfgFwaTgyCXQDYSOTkQQhGvDubQtBaMKmJc/7nh3SMjJo+1YLWaDwavrepu2Y330thu8kjswFuFXXokyPJyOZ5/16rq1BwuR0kb6JPoHHKg7DpEWcIDKxgTkhX+09w8ICPP5vkn5BXQ1N06LpMVtddto6W9xy0kMdo1AO2vWsJpQum4jweGaAUEQ6u2jTjp+QTAJhETaBUFfZ+fA7+4LAoC8CgMlqYKNDZu9eTwSsvOQ0kZzZblX1/U2lYWtCAGZC3xjFnKgCAwk4vo19G76FFNNjdfWrT6wD21QMEm5Y5c79jr7nocnzycraB86WzTNCTe6lSXsCUl5BQDTQit4o/QNYgNjOTvV9URMabViLCsb5h8wGSyYDVZ746m+PgL9gsCPKwRHaOnrNNLf1Tnwu/vdqMxNTShq6qkviOHN0je9er7EnDwAGiumt3moYn8rSXkRBIb43h4bdeONCJWKjuee98p6UkpqigtJnTMPhYf5Hy5j6od374P3vgtpy8n4zp9RKAUV+yev53d8ZjZKlYqGKfYTNPQ1sL1+u1tOYgBTbS1Sr0ebNzJ0NCQywK8RDEUIcbEQ4qgQolwI8Qsn928UQhQNfH0hhFgw5F61EKJYCFEohNjjjfNMN4IjtPR3m+jr7Bj43X1BoPvyKwAyz1tNUVsRRzq894QVFB5BWGz8tPYTdDbp6GzUkbXQe0lkY6GKjSVs1Sq63nkHa1eXx+t1NzfR09pC2ryFHq/lEu0V8NQFUPginP1TuOkdtLEJpMyKpHJ/i286lzlBpdEQl5k95YLgrbK3ANxyEoM9fwAgoOC4FtfX4RAEWvR+H4EdIYQS+A9wCTAbuF4IMfuEYVXAOVLK+cDvgcdPuL9SSrlQSrnU0/NMR0IitNhskq6WNoRQEBjmvm1W98UXKKOjOe/c2wlQBvDqkVe9esaEnLxpXXOostD+FJu10LdmoaFE3XorUq+n0wtlJxwdu9LmLhhnpBc4/B48vgJ66uHGN+HcX8NAPZ3sRXH0tBm837lsDJLyCmiqKMNqmZpGNWabmXfK3uHM5DNJCklya67h8GFQq9HmHO/C1ttp96UFR2j9GsEQlgHlUspKKaUJeBUYVsBDSvmFlNKR1vgV9ib1Xxsc2cU9re0EhYejcKHI1VCklOi+/JLg5cuJCIzksqzLWF+1nh5Tj9fOmJiTR29bK7ouJ9mn04DK/a3EZ4YREundWPexCMjPI/j00+l88UWkh2UnaooLCYmKJirJhy99qxk2/Apevwmic+wF43IvGDYkc0EMQtj/PSeLpPwCrGYzLVVT0w1v67GttOpbuSbvGrfnGg4dRpubgxgSHuoIBQ8IEljNZr8gGCAZGJo6WDdwbTTuAD4a8rsENgoh9goh7hptkhDiLiHEHiHEntbWyXsRewNHG8Xe9g6CI6Lcnm+qrMTa1kbwacsBWDNrDXqLnnXl67x2xoQBP0HTNPQT9HYYaKnp9Xm0kDOibrsNS2sr3evXjz94FKTNRu2hItLmLvBJNzIAehrtuQFf/htOWQu3fwwRaSOGBYZqSMqNmFQ/gcM5PlXmoddLXycuKI6zU9yr1iulxFBSQsDs4QaOvk4DgWEazEZ7MpnfNGTH2SvbqQFSCLESuyD4+ZDLZ0gpF2M3Ld0nhHD6vyWlfFxKuVRKuTTWg2YsU4FDI9D3dBI8gYzg/t32JudBp5wCwKyoWSyMXchrR18btaexuzgqkU5HP4Hj6XUqBEHwmWegzc2h45lnJ2xXb6mpwtDbQ7qv/AOVW+Cxs6CxCL7xJFz2V1CN3sM5a1EcnY06Opt0vjnPCYRERRMWG0/D0ckXBFXdVXzR8AXX5l2LSuFe7omlqQlrZycBBQXDrus6jYRG2s1CgF8jGKAOSB3yewrQcOIgIcR84ElgtZSy3XFdStkw8L0FeAe7qemkIjBUg0IhMPR1EzQBR3H/rl2o4uJQpx1/wlszaw01PTV81fCVV86o1gYQk5YxLVtXVha2Ep0cTES875q4jIYQgqhbb8V49Cj9X03s39pn/gGbDbb+1V4vKDAK1n4G88ePkXcI1Ip9k6gV5M2iobRk0pzUDl47+hoqhWpiZqESu+A6USPo7TQORgwBBAT7BQHAbiBXCJEphNAAa4Bh5RuFEGnA28BNUsrSIdeDhRChjp+BC4HpV7fWQxQKQWCYGpOhl5BI90xDUkp0u3cTtGzZMLPCBekXEBUQxStHX/HaOROz82iqKJ1W1SL7e0w0lHdNiTbgIGzVKpTR0bQ/88yE5tcWFxKVnDqhRMJR6e+wVwz97Pcw5yq7EIhzLT8hJFJLfGYYVQcm10/Q19lBb9vk7akz61hXvo6LMi4iJtD9IAPDocOgUAyrOgp201BIpBbDQBMjv2kIkFJagO8AG4AS4HUp5SEhxD1CiHsGhv0GiAb+e0KYaDywXQhxANgFfCil/NjTM01HAkOsIG0EhbunEZiqq7G2tg2ahRxolBquzr2arXVbaegboYBNiIScPIw6HZ1NjV5ZzxtUHWgFaTdnTBUKrZbIG29At3UbxnL3ku4sZjN1Rw55Vxuo3wePnQMVn8Glf4WrnwKtex9GmQtiaKnpHXR8+hpHYln9JPoJ3q94nz5zH9fPun5C8w2HD9t7EAQd10SNensyWfBA6Cj4TUODSCnXSynzpJTZUsoHBq49KqV8dODnO6WUkQMhooNhogORRgsGvuY45p6MaAPtbzh3cwj6dw33DwzFkSr/+lHvdNUadBhPozDSysJWwmIDiU6e2uqOkddfj9Bq6XjuObfmNZYdwWI0esc/ICXsfhKevgiQcPsGWLZ2QlnCmfPtGlZ1cZvn53KB2LQM1NoAGicpw1hKyStHXmF29Gzmx8yf0BpOHcUd9tDR0CGmIX9msR+XUWkGBEGkm4Jg926UsTFoMjNG3EsMSWRFygreLnsbo9XzJ7volFT7m3Wa+AmM/WbqjnSSvTDWd9E2LqKKjCT8yivpXvcelvb28ScMUHvwAEIoSJntYXE3kw7evgs+/DFknm0PDU2ZeM/jyMQgwmMDJ808pFAqSczNm7TIoV1Nu6jsruSGWTdM6LVjaW/H0tQ0wlHs0KBCIu2VR5UqFSrt6I75mYJfEEwSCoW9gYXGjUJfUkr6d+8m+JRTRn0xr5m1hk5jJxurN3rhjEris3OmTQhp7aEObFZJ5hT6B4YSdcstSJOJzpdd98vUFh8gITvXs8YlraXwxLlQ/Aas/BXc8AYEuR+GPBQhBJkLYqg72onJYPFoLVdJyiugpbpyUoobvnLkFSK0EVycefGE5hsOO3cU9w0kk4VEHS8vMdUPKd7ALwgmjX4AbFbXE6LMtbVYmpudmoUcLE9cTkZYhtcyjROy82itrsRinpos0KFUFbURGKomPtP3VTJdQZuVScg559D5yivYjONrYMb+fhrLj5I2zwP/wMG34ImVoGuFm96Bc34GXmpxmbkgFptFUnuowyvrjUdi3iykzebzB42GvgY2H9vM1blXo1VO7Gl9MGKoYLgDvq/TiBCcVJVHwS8IJg/ZD6jQuxG6fWL+gDOEEKyZtYaitiIOtXneCSoxNx+rxUJrzdRkgTqwWm3UHmonfW40CsX0eeKKuvUWrB0d9Hzwwbhj60oOIm020uYudH8jiwnW/wzevB3iZsPd2yDbtdaKrpKQHU5AiHrSzEMJ2QPFDX1senT4zK7Lv27CaxgOH0adkoIyfHgDob4OA0HhWhRKBYa+vpMiYgj8gmDSsJp1oAhC50aURv/uPSgjI9FkZ485bnX2aoLVwbxQ8oKnxxx8s051YlljeTfGfsugU3O6ELR8Odr8fDqee37cmPja4kJUag1JeW6Wne46Bs9cArseg+XfhtvWQ/hYyfoTQ6EQZMyLpuZgO1ar70OGg8LCiYhP9Olry2g18lbZW6xMXUliSOKE1zEcOjTCLASOHAK7lmHo7fFrBH7cw9jfi0IRRG+H6/bR/v37CVy8eFwbZIgmhKtyrmJD1QZa+lvGHDseodExBEdETrkgqC5qQ6ESpBS4n4DnS4QQRN18M8bSUvq//HLMsbUHD5A0a7Z7bQzLN9l7CbcehWufg4v/CErXyya7S+b8WIz9FhrLuny2x1AScvJ8Wu7846qP6TJ2TThkFMDS2Yn52DEC5o108Ou6jIP1rvS9PQSGTg+zpaf4BcEkoe/pRqUNobfdNUFgaWvDXFtL0GLXmpzfUHADVmn12FcghCAhJ39KI4eklFQVtZGSH4UmwDctKT0hbNVl9gSzMUJJdV2dtB2rcT1s1GaFzX+EF6+B0AR7G8k5V3rjuGOSOjsKpVpB1YHJCSNNzMmjr72Nvg7XI69cRUrJSyUvkR2ezbKEiRcoMBy0m1gD580bsX5fhz2ZTEp5UgmC6fcuO0np7+1GG5TmskbQv38/AIGLXGtrmBqaysrUlbxe+jpr568lUBU44bMm5uRRseerKbOBdjb109OqZ9H5qeMPngIUWi2R119P27//jbGyEm1W1ogxbpWV0LXD23faE8QWXA+X/Q00k1NOQ61VkjorkqoDbZz5zVyfR8AkDGmClBvlvd7bAHub91LSUcL/LP8fj/4Ow8FiAJT5+VRVVWEYiHKSNsmi68LRBhsoKSnhtLt/iDY4hJKSqe214IyAgABSUlJQq13TJv2CYBKQUqLv7iI6bS69Ha75CPT79iM0GgLmznF5n5tm38Rnxz7jg8oP3O7LOpRBP0FlGRnzXdNIvEl1kf3pNGP+5PUecJfI69fQ/vjjdDz/PIm//e2I+zXFhQQEhxCXOVJIDOPYbnjjFtC1weX/hMW3TFobSQeZC2KpLm6nvb6PmBTf2rzjMrJRKJU0lR0l9xTvCoLnDj9HhDaCK7Kv8GgdffFBNJmZNHZ1ERoaSkZGBkIIzCYrnY06wmICUWmgTasmPDZ+Qv1FfImUkvb2durq6sjMzHRpjt80NAmY9P1YLRaCIyLQdRuxWsZ3zOn37SNg7lwUbtiXl8QvoSCqgBcPv+hRca+EnFwAmsqmJsO4uqiNmNSQSe094C6q6GjCrric7nfXYekc3sNBSkntwQOkzpk/eu8JKeGrR+GZi0Ghgjs2wJJbJ10IwIDAFUyKeUil0RCbnun1ENLq7mq2HNvCdfnXEaDy7HVjKC4mYN5cDAYD0dHRg9qFbeB9q1QJpNUKgFBOv49QIQTR0dGDmowrTL+/4iSkv7sLgLDYKJCMW9/FZjCgP3zYZf+AAyEEN82+icruSnY07JjocdEGBROVlDIlPYz1vSYaK7vJnMbagIOom29GGgx0vf7GsOtdzY30trWO3pbS2Atv3gYf/xxyLoC7t0DS5GteDoLCNCRkhk2anyAhJ5+mijJsNqvX1nyx5EVUChVrZq3xaB1zczOW1lYC59r9A0NNTFar/eFKoVQMnn3S+k+7ibumMb8gmAT6u7sBCI+zV5/sG8dPYDh4EMxmAhe75h8YysUZFxMbGMuLh190/6BDSMjJo6m8dNLLBtccbAc5vc1CDgLynHcwqy0uBEbxD7SUwOMr4fA6OP+3sOZlCJz6yKjMBbG01va6FdU2URJz8jDp9XQ21HtlvW5jN+vK17Eqa9WEqowOxVBs9w84ixhyaAQKpcA2oBG4221wuuIXBJNAf08XAFFJ9pj48d5sg47ihQvd3kutVLNm1hp2NOygoqvC7fkOEnPy6e/umtSywWDPJg4O1xCbNjPis6NuvQVLays9Hx8vmltbfIDQ6FgiE0/oj3vgNXupCEM33PwenPlDr2UJe0rmAvsHqMM/40sGHcZeMj2+UfoGBquBm2bf5PFa+uKDoFKNqDEEYLNKFEoFQghsNodQ8AsCPy7i0AhiUlwTBPp9+9FkZKCKmlg9mWvzrkWr1PLC4YknmA2+WScxjNRitlJ7uIOM+TEzpn5L8JlnosnKouPZ55BSOm9LaTbA+z+Ad+6ym4Du2QaZZ03puU8kMsHe+GcysoyjEpPRBgV7xU9gtpp5ueRlTk86ndzIXI/XMxQXo83NRREw0s9gtdhQquz/p4M+gmkiyD3l5Pgrpjn6HrsgCImKIChMM2YugZQS/UAi2USJDIhkVdYqPqj8gE7DxJrRx6ZnoFSpJrUAXX1pFxajdUaYhRwIhYKom2/GcPgw+j17aKmuxNDXS7qjvlBntb1s9N5n4Izv2zWB0IQpPfNoZM6Pob60C5Pet0XohEJBfHYujWWev7Y+qv6IVn0rN8++2eO1pJToDx0icK7zSrF2QWD/yLRZrSiUSp8/sDzxxBMsXLiQhQsXolAoBn/+0Y9+5NV9/IJgEujv6UYbHIxSpSY0OmBMjcBUVY21q4vARQs92vOm2TdhtBp59ejEEsyUKjVxGdleU99dobqoDZVGQcqsqbeZu0P46itQhofT/txz1Az4B1LnLoCjH9sbyHRU2X0BF/wOlNM3YjtjQQw2q6T2sO+L0CXm5NNaW4XZNPHy6VJKnj/0PDkROZyedLrHZzLX1mLr7nbqH5A2ic0qRwgCX7N27VoKCwv58MMPSU1NpbCwkMLCQv72t795dR+vCAIhxMVCiKNCiHIhxC+c3BdCiH8N3C8SQix2de7JQH93F0FhEQCERo0tCPRF9kSkoAn4B4aSHZHN2Sln80rJK+gt+gmtkZCbR3NV+aBjzJdIKakuaiO1IAqVembZXRWBgUSsWUPfp59Rs2cn0cmphOx9GF65DiJS4e7PYdZlU33McUnICicgWE1Vke/NQwk5eUibjZbKifuxdjXt4mjnUW6efbNXnsz1xfYuuSdmFAODtZgUA6Yhm806qY7igwcPMs/JubyFx48nQggl8B/gAuyN7HcLId6TUh4eMuwSIHfg61TgEeBUF+fOePp7ugkMs1cxDIkKoOpAG9ImEU6qahqKilAEBaFxkq3qLrfPvZ1bP76Vd8re4YaCG9yen5idx/6P3qe9rpbYdNcSUyZKW10ffZ1GTlnl2318ReQNN9DyzNPUlx1hfpqE7S/D4pvhkj+DeuJZ3pOJQiFInxdNdVEbNqsNhQ9j5BMd3fAqSkmeNbK4mys8f/h5ogKiuDTrUq+cSV9YiAgMRJs70tfwuw8Oc/BYNyq1AqEQmI1GhBCoNMcmvN/spDD+93LXEkaLi4uZO4rJyht44396GVA+0HbSBLwKrD5hzGrgeWnnKyBCCJHo4twZj763h6CB7MPQqACsFhv6Puf1/vUHigiYNw/hBbVzcdxiFsQu4PnDz2OxuW/3nUyHcXVRGwjImDdz/ANDUcfHYT51PlYpSbGUwer/whUPzxgh4CBzfoy9CF1Ft0/3CY6IJDQmdsKmx7LOMrbWbWXNrDUT7jlwIvoDBwicOxehGvl8LAdyQI9rHnJSc/9O1Ah0Oh233HILa9eu5aWXXvJ4fW8YLJOBoWKxDvtT/3hjkl2cC4AQ4i7gLoC0tDTPTjzJGHp7CBz4UA2Ntkcj9LYbCAobnjVsMxgwHD1K9G23eWVfIQS3z72d72/+PhuqN3BZlnvmiYiEJAKCQ2gqP8r88y7yyplGo7qojfiMsBH/JjMCKeGLh+m2HkLIJEKTvwWLbpzqU02I1NlRKFSC6qI2kvN866tJzMmfcDDC0wefJlAVyA2z3Nd0nWEzGDCUlIz63vv5ubn095gGw5pbqioICo8gNHpyHlyKi4v54Q9/OPj722+/zTXXXMPll1/Oddddx403evZ684ZG4EwunpiFNNoYV+baL0r5uJRyqZRyaWzs9KpRPxYnVikMjbI/vTjzExgOl4DFQuCCiTXbdsaK1BVkhWfxzMFn3E4Os1cizfN5SWpdl5GWmt7BWPYZhaEbXvsWfPI/NGjTiBQq+j7cjLRMTvtHb6MJUJGSby9C5+tkwoScPLpbmunvcU/7qOut46Oqj7g271rCteHjT3ABw6FD9vfeKEEaVovdUSyEQNpsSCknLYfAZrNRVlbGrFnH+1rU1dWRmmovyqj0wjm8IQjqgKFlIlOABhfHuDJ3RmM26LFaLASEHjcNwSiCoLgIgID53hMECqHg1jm3crTz6ITKTiTk5NF2rNanfWariweKzM00s1BjkT0q6OhHGM/5LU1dkvRFS7E0NNL7ySdTfboJkzEvhu5WPV3N/T7dZ9BP4OaDxrOHnkUI4ZWQUQf6wkIAAhc4rxY7LHR0kstLlJeXk5KSglZ73ASWkpJCXV3dwHk8byrkDUGwG8gVQmQKITTAGuC9E8a8B9w8ED20HOiWUja6OHdGo+/tARjUCLRBajQBSqeCQH+gCFViIuq4OK+eYVXWKuKC4niq+Cm35ybm5COljebKcq+eaSjVRW2ExQQQlRTssz28zr4X4KkLwGKAWz/kWOjpSJuNnMsuR52WRsezo/cqmO448jh8XXsoPjMHoVDQWO66n6BN38a75e9yRfYVxAfHe+0s+sIDqFNTUUVHO71vs9iORwxZJ1cQ5OXlcfjw8PiZb3zjG7z11lvce++9XH755R7v4bEgkFJagO8AG4AS4HUp5SEhxD1CiHsGhq0HKoFy4Ang22PN9fRM0wl9z3BBABAaHUhv28iQTn1RkdPQNU9RK9XcPPtm9jTvoai1yK25Cdn2CApfFaAzm6wcO9JJxrwZkk1s1sO6++C970DqMnsv4fTTqD1YiEqjJWnWHKJuugn9gQODT5kzjdCoAGJSQ3xebkIdEEBMarpbGsGLh1/EZDVx2xzv+NFgwHxbWDhqSRebTWKzDc8hgKktLxEcHMwzzzzDI4884rF/ALyURyClXC+lzJNSZkspHxi49qiU8tGBn6WU8r6B+/OklHvGmnsycaJGABAeG0h363BBYOnowFxX51X/wFCuybuGUE0oTx982q15QeERhMXG+8xPUFfSgdVsI2Mm+AfaK+DJC2D/i3D2T+GmdyHE7q+qLT5A8qzZqNRqIr5xFYrQ0DE7mE13MufH0FTZjb7XNP5gD0jMyXe5uGGvqZfXjr7GBekXkBGe4bUzWBoa7BVHFzo3Cx0vP32CIDhJCs6BP7PY5+j7egGGNa8Iiw2kp82AtB1/8esP2BPJAr3oHxhKsDqYNflr+Kz2M6q6q9yam5iT55b67g5VRW1oApQk5UT4ZH2vUfI+PL4Cuo/BDW/Aub+GgQ+Cvs4O2utqB9tSKoKDibj2Wno3foK5YWa6vDIXxCLlQDVYH5KQk4dB10dX0/j/Tq8dfY0+cx93zrvTq2cYfO8tWOj0vnVIHwKYHhqBt/ELAh8zaBoKGa4RWC02dN3H0+v1RUWgVBIwx/WOZO5yY8GNaJQat30FCTl59La1ouuaWN2i0ZA2SXVxO2lzoweftqYdVjNs/LU9Mig6214wLu/CYUOctaWM+pZdXe940fMY76kgJjWE4AgtVT42DyW6mKtisBh44fALnJF0BgXRIyuDekJ/YSEiIICA/Dyn962WgT4EQzQCoVCcNAXnwC8IfI6+twehUKANOt6DNjzGnmQ01DxkKCpGm5ODIsh3vWqjA6O5Ju8aPqj8gLreOpfnJQzJAvUmzTU96HtM0zdaqKcRnrsCvngYTrkTbt8AESNzWGqLDxAQEkpcxvFscHVSEqEXXkDXG29g0+km89ReQQhBxvwYag93YDH7rsRIVEoqam3AuKbHd8rfocPQwR3z7vD6GfSFA4lko/T3tVpsCCFQKI5rBCeTNgB+QeBz9L3dBIaGDXt6CIu1h5A6BIGUEsOhQ06LXXmb2+fejlIoebL4SZfnxGdm26M7vFAtcijVRW0IhSB9rvNIjSmlais8dhY0FsI3noTLHgLVyAxWKSU1BwtJmzN/xBNi9K23Yuvtpevtdybp0N4lc34MFqOV+qNdPttDoVASn50zpiAw28w8d+g55sfOZ2n8Uq/u70gkG6vIoyNiaLBlpdXiFwR+3GNoMpmDkKgAhELQMyAIzPUN9oqjPjQLOYgLiuMbud9gXfk6Gvpcs1+rtQHEpGV4v89sURuJ2fZCZ9MGmw22PQTPr7Z3Dlu7GeZfO+rwzsYG+trbSJs30tEYuGABgQsX0vHCC4P162cSyfkRqLRKn0cPJWTn0VJdgdXivOzKBxUfUN9Xz9p5a70eWaY/UGTvBrhkyahjrEOqjoJdI/BGEtd0wi8IfIy+t4eAkOHdtpRKBaFRWroHQkgNh+wRs770Dwzljnl3gMAtX0Fidh5NFaVILySvAPS062mv102vbOL+DnhlDXz6O5h9Jaz9DOJmjTmlptjeTS59nvOew1G33oK5tpa+zz/38mF9j0qtJG12FFVFvs0yTszJw2qx0FpTPeKe2Wbm8aLHKYgq4JyUc7y+d//ePSAEQWP0/7BabCiVwwWBYhqXE58IfkHgY/Q9IzUCsDuMHRqB4dAhUKnQ5udPypkSghP4Rs43eLv8bZp0Ta7NycnDqNPR2dTolTNUF9mjUaaNf6B+Hzx+DlR8Bpf8Ba55GrTjt8usLS4kLDae8HjnzWZCzz8fdVISHc886+UDTw6Z82PQdRlpO9bnsz0Sxsgw/qDiA+r66vj2wm/7JM9Ev2cv2rw8lGEj36MANqsNaZPHO5NJ6fcR+HEfQ1/vsNBRB2GxQcM0Am1uLgqtd6oousId8+4A6bpWcLwcgHfCSKuLWomIDyIi3nfOcZeQEvY8be8iZrPB7R/DqXfhSmlJm9XKsUPFpM9bMOqHlFCpiPzWt+jfswf9oZmXK5k+NxoEPm1hGRodS1B4xAjTo0MbmB092yfagLRY0BcWEjSWWejEiKGB8hLeqA7sCv4OZScBJxacG0p4TCBGnQWDzmR3FM+ZWE32iZIUksTqnNW8VfYWzbrmccc7oju8UZLapLdQX9pF5lS3pDTp4J274YMfQsZZcPdWSHHdGdlcWY6xX0faQP7AaERcew2KoCA6ZmCCWWCohsSscJ+GkTqKG5742hrUBhb4RhswlBzB1t9P0NKxBMFADoHa/lEpJzmHYEZ1KPPjHJNej81qHeEjALtpCKD98LFJcxSfyJ3z7sQmbTx76Nlxxw5Gd3jBYVx7uAObVU5tb+K2MnjiPCh6HVbcDze+CcHuRS852lIOzR9whjI0lPCrr6Zn/UeYm1smeuIpI2N+DG3H+ujr9F3hwcTsPDoa6jD220NtzTYzjxU9xuzo2ZydcrZP9uzfay9wELhkdOFvHS2reJJNQ9O+Q5mf0TE4soqdCIIwhyAoqkTN5DmKh5ISmsLl2ZfzRukb3D73dmKDxi7vnZiTz77167CYzahGibl2heqiNgKC1SRkObfL+pyDb8N737WHg970NmSfO6FlaosLicvIJihs/FLIUTd9i84XX6Tz5ZeJ++EPJrTfVJG5IIYv36mguqiNueek+GSPhJw8kJLmynLS5i4YjBT65bJf+qwGlX7vXtSpqajjRy/yaDXbUCgFig2/hKZilFYLUWYTKm0ACA+foxPmwSV/cmnoTOhQ5mcUHILAmUYQFmPPJeisaplUR/GJ3DXvLiw2C88cembcsQmD0R2VE97PZrVRfbCN9HnRPm2F6BSLCT76Obx5G8QV2E1BExQCZoOBhtISp2GjztCkpRFy3rl0vfoqNv3EekhPFRHxQYTHBfrUPBTvKG5YXjqoDcyJnuMzbUBKSf+evWP6B2B4+emhTHaBxBM1gsrKSu644w6uueYar6zv1wh8iKHPHmkREBIy4p4mQEVgmIaeFh2pk+woHkpqWCqrslbx2pHXuHn2zSQEO49+AXu8N9ijOxJzJia4miq7Meosk+8f6K6DN26Fut1w6r1wwe9ANfFuaHVHDmG1WAbrC7lC9K23UrPpU7rXvUfkmusmvPdk48gyLv68DpPBgibA+x8bgSGhRCYm0VReOqgN3H/q/T77wDVVVmLt7BzTPwBgMdvQBqkGn9z729vo7+4iLjPbpYACb3Fih7KsrCyeeuoprwkCv0bgQwy60TUCgPCYAHp1ikl3FJ/IvQvvxYaNx4oeG3NcaHQMwZFRHjmMqw60oVAJUmdHTXgNtyn/FB47G1pK4Npn7W9qD4QA2P0DSpXKrcbrgUuWEDBnDh3PP++1fIzJInN+DDaL5NjhDp/tkZCdR2NF6aA2cFbyWT7bq3/PXoAxE8mkTQ6Ejp6YQ6CcVI3AWYcyb+MXBD5kLNMQQEgQ9KsjpsRRPJTkkGS+mfdN3il7h5qemlHHCSFIyPasdWV1cTspeZE+eaocgc0Gn/8JXrwaguPgrs9hzlVeWbq2uJCk/NmotQEuzxFCEHXrLZgqK9Ft3+6Vc0wWidnhaINUPs0yTsjJQ9fRTmdbk8/yBhz0796NMiYGTUbGqGNsA9WBVeqhgsAy6clkzjqUeRu/IPAhg6ah4JGmIYAgSxdGbQRqN54qfcXa+WvRKDX8p/A/Y45LzMmjs7F+8G9zh84mHV3N/ZMTLaRrh5eugc//CPOvg7WfQkyuV5bu7+6itabKLbOQg7CLLkIVF0fHs8965SyThUKpIH1eNNXF7YMfkN4mauBD+RSZ71NtQEqJbudXBJ966pjCxma1/51DNQLrFCSTOetQ1t7ezj333MP+/fv54x//6PEeHgkCIUSUEOITIUTZwPdIJ2NShRCbhRAlQohDQojvD7n3WyFEvRCicODrUk/OM93Q9/Wi0mpRaZybIQJ6GkAoMEalOr0/mcQExvCtgm/xUdVHHO0YPWkswYPEMoez0eeCoG6P3RRUvQ1W/QOuehQ03muDOVh22kVH8VCERkPkjTei++JLDEd90+zHV2TOj8WgM9NU6V6zeVf5zLgLq5CcrVzkU23AVFWFtbWNoOWnjjnOmSCwWSwoVFOfVRwdHc2jjz5KRUUFv/zlLz1ez1ON4BfAp1LKXODTgd9PxAL8WEpZACwH7hNCDH0E/ruUcuHA13oPzzOtMPT1jmoWAtA22D8IerqmR0GyW+bcQqgmlIf3PzzqmMScPIRQUF96xO31q4vaiEkNITTKdXOKW0gJOx+Dpy8GhQLu2AhLb/O6U6+m+ADa4GDis3ImND/yum8iAgLoeH5mJZilzY5CoRRU+6CXcY+ph6dKnsEcrUE09Xh9/aHovvoKgOBTxxEENolCpUAohpeXUJ5kdYbAc0GwGnC8mp8DrjxxgJSyUUq5b+DnXuy9iZM93HdGYOjrI3AUsxCAqszusOps6p+sI41JuDac2+fezpa6Lexv2e90jCYwiNj0TBqOulcuQd9noqmi23fagLEX3rwdPvoZ5JxnDw1Ncl4IzhOklNQU7ydtzoIJtypURkQQfuVqet7/AEu7bzuAeRNNoIrkvAifhJE+e/BZekw95M1eSlNFmU+d6f1f7USVlIg6dWxN3Ga1oTrBUQwnV2cyB54KgngpZSPYP/CB0TMzACFEBrAI2Dnk8neEEEVCiKedmZaGzL1LCLFHCLGntdV3dU+8yVgagaWzE1FfTYDaQmfz9BAEADfMuoHogGj+ue+fo1acTMovoLGsFKvF4vK6NQfbkRLfhI22lMAT58Lhd+G8/4U1r9hLSPuArqYGettaxy0rMR5RN9+CNJnofOVV7xxsksiYH0tXcz9dXnzNtunbeLHkRS7JuITZc5dj0uvpaKj32vpDkTYb/Tt3Enzq8jHNT/an/xMjhuyvd4Xqa6gRCCE2CSEOOvla7c5GQogQ4C3gB1JKh+73CJANLAQagYdGmy+lfFxKuVRKuTQ2duwM2OmCoa+XgFDngsB41G5jj4hS09U0fTpYBamDuHvB3ext3ssXDV84HZM8azZmo4HWGtd7H1cfaCM4XENs2vgVPd2i6HW7ENB3ws3r4Kwf2c1CPqKm2O4fSJ+Af2Ao2qxMgs85m85XXsFmNI4/YZqQMd9ehsObWsHjRY9jtpr5zqLvHM9V8XLvCwfG0lKs3d0Ej+MfMPSZQR6vMQRfc41ASnm+lHKuk691QLMQIhFg4LvTQipCCDV2IfCSlPLtIWs3SymtUkob8ASwzBt/1HRhLI3AUGK3sUelR9HZ1O/Teu/uck3uNSSHJPPPff/EJkeq6Mn5dhdPw9HDI+45w2q2UXu4g4z5Md5zAlqM9mJxb6+FxIVw9zbI9E0W6lBqiwsJjYklIiHJ47Wib7kFa3s7PR986IWTTQ5h0YFEp4R4LYz0WM8x3ih9g6tyryItLI2opGQ0gYFeKW7oDId/IGgc/4BD43GUnwawWRyC4GuoEYzDe8AtAz/fAqw7cYCwv/OfAkqklH874V7ikF+vAg56eJ5pg5RyHEFwGFV8PFHpURj7Leh7nXdnmgrUSjXfWfQdSjpK+LBy5IdUaHQMYbFx1B8tcWm9+tJOzEar9/wDnTX2stF7nobTvwe3vA9hiePP8xCbzUrtoQOkz1voFYEWdNppaPPy6HjuuWn1IDAemfNjaCzvsj81e8g/9v0DtULNPQvuAUAoFCRk53qUqzIW/V/tRJOejjph9Ax6gK4WexmQoRqB1WEa+jpqBOPwJ+ACIUQZcMHA7wghkoQQjgigM4CbgHOdhIn+WQhRLIQoAlYCP+QkwWI0YrVYRs0hMJYcIWDWLCIT7PX4u5qnj3kI4NLMS5kTPYd/7vsnBsvIqpNJeQXUHz3s0gdYVVEbKo2ClFlesNuXbrCHhrZXwHUvwYW/h0l6QmuuKMeoG7/stKsIIYi65RaMpaX0DzypzgQy5scgJdQc9EwrKGwpZGPNRm6bcxtxQcfdiwnZebTWVGExmTw96jCkxUL/7t0ELV8+7tjuFodGcEJWsUKBwoemx6nCo79IStkupTxPSpk78L1j4HqDlPLSgZ+3SymFlHL+iWGiUsqbpJTzBu5d4XA8nwzox8gqthmNGCsr0RbMImJAEEyXyCEHCqHgx0t/THN/My8cfmHE/eRZc9B1dtDTOnYvAykl1UVtpM2ORqX24EnKZoVPfw8vfxPCU+HuLVCwauLrTYDqA/tAiAklko1G2KrLUEZH0/HszAkljUsLJShc45GfQErJX/b8hdjAWG6Zc8uwewk5edisFrd8UK6gLyrGptON6x8A6GrpRyjFMM3PnkNw8pmFwJ9Z7DPGKkFtLCsHq5WAWQWERgag0ijobJxeggDglIRTWJm6kieLn6RNP/xNn5xfAED9kbH9BG11ffR1GgedjBOirwVeuBK2/RUW3QR3fgJRWRNfb4JUHdhLQlaOS2WnXUWh1RJ5/fX0bdmCsXLiVV0nE6GwF6GrPdyB1TyxMM8NNRsoai3iu4u+S5B6eJc6R9Kit/0Euu3bQaEg+LTTxh3b1axHqRxu/rNOQXmJycIvCHzEWJVHjUfstvWAglkIhSAiPojOaWYacvCjJT/CZDXx6IFHh12PTk1DExhE/TgO4+qiNhCQPneC/oGaL+2moGO7YPV/YPW/QR04sbU8wNDXR1NZKRkLx65WOREir1+D0GjoeP55r6/tKzLnx2A2WKkv63R7rslq4h97/0FeZB5XZF8x4n5oVAwhkVFejxzq27GdwHnzUEZEjDnOZrXR2axDcYIgsFksKCc5q9jfqnKG46g8qnXiIzCUHEERFDSY0BKZEDztTEMOMsIzuDb/Wt4sfZPKruNPrAqFkqT8gnE1gqoDbSRkhhMU5ma1Tynhi4fh2cvsH/x3boJF35rIn+AVaooLkdJGxvzFXl9bFR1N2OWr6H53HZZO9z9Yp4KU/EhUasWEsoxfOfIK9X31/Hjpj1GOkpSXkONZccMTsXR2Yig+SPCZZ447trtVj80ih/XLON60fnI1An+ryhmOUWd/wnemERiOHEE7axZiwOkUmRBEb4cBs2l6lJo4kXsX3EugKpC/7PnLsOvJeQW019WOWoCur9NIa22v+2YhQze89i3Y+GvIv8ReNTTBd236XKH6wF60QcEk5vqmgVDUzbcgDQa6Xn/DJ+t7G5VGSersKKqK2tyKeOowdPBY0WOcmXwmpyedPuq4hOyJFzd0Rv+XX4LNRshZ4wuCjgb7e3eoRmCzWpFSopwiH4G/VeUMxaCzv4C1QcMFgZQS49GjhF9x+eC1iPggkPZIhZgULydceYHIgEjuWXAPf93zV7bWbR3sGuWoxd9QVkLWolNGzKsutj8tZs53IwGwqRhev9keInrhH+C070xqAxBnSCmpPrCP9HkLfRY6GJCfR/Dpp9H50ktE33YrYpRChdOJjPkxVB1oo62uj9hU1163D+9/GL1Zz0+W/mTMcYPFDSvLyJjveamQvu07UISHE+DCh2lHow7EcEHw4K4HOdRcjEqj8dprYFbULH6+7OcujfW3qpyhGHU6hFCgCRxuz7Y0NGDr60Oblzd4LTLBXhlzupqHwF56IjM8kwd3PYjJag/rS8jJQ6FUjmoeqi5qIyw2kMjEIKf3R7D/JXjyfDD1w60fwunfnXIhANB+rIa+jnbSF3jfLDSUqFtuwdLSQs+GDT7dx1tkzIsBgcvJZYfbD/NW6VtcX3A92RHZY45NGGhd6Q3zkJQS3fbtBJ92GsKFD/GOBh1h0QHDIobkQGLlZLeodHCiRvDuu++ydu1aVq9ezcaNGz1e368R+Ahjfx/a4OARLxxH6WFt3nETQ0RcIIjpLQjUSjW/OOUX3L3pbp4//Dx3zrsTtTaAuMxsGpwklpkMFuqOdDL37OTx3zxmPaz/Kex/ATLOgmuehpAxy1ZNKtUH9gGQ4WNBEHzWWWiysuh45lnCVq2asg8dVwkK05CQGUZ1URunXJY55lgpJX/c+UciAyK5d8G9466tDQomKinFKw5jY1kZlpYWl8xCYNcIopKGa/I/nPtdetpaiU3PnBLz0ImtKq+88kquvPJKOjs7+clPfsKFF17o0fp+jcBHGPr6nCaTGUsdguB4kxSVRklYdMC0qjnkjNOTT2dl6koeL3qcZp09fyA5v4Cm8lKsluFZprWHOrBabGQtGidaqKMSnrrALgTO+om9XtA0EgIAVQf2EZ2SRliMb2tcCYWC6Ntvw3D4MLodzus8TTcy5sfQUtNLX+fY9ZI+qPyAwtZCfrD4B4RqXDMjJeTk0Vh21OOsa902eze44DPOGHes1Wqjq7mfqMTgE65bEEJMSVbxWK0q//CHP3Dfffd5vIdfEPgIY78ObfDIZijG0lLUSUkoT3AiRyYE222T05yfnvJTrDYrf9/3dwCS8+dgMZtoKi8bNq5yfwuBoWoSsiNGX6zkA3hsBXQdgxteh/P+ByZY2tlXmA0G6ksO+lwbcBB+xRWoEhJof/TR8QdPAxxlQxz+IGfozDr+vvfvzI2ey+oc12tVJuTk0d/dRW+7ZxnMfdu2oc3NGbesBEB3sx6bVRKVNPy9a7NMfq9iB85aVUop+fnPf84ll1zC4sWevzb9gsBHGHR9TkNHjWWlw/wDDqKT7SGkVsv0bmqeGprKrXNv5cPKD9nXvI/kAnu/5bqS42WirGYb1QfbyZwfg0Lh5I1jtcDG/4HXboToLHvvgLyLJutPcItjJcVYLRaf5A84Q2g0RN9+G/179tC/d++k7OkJUYnBhMUEjOkneKzoMVr1rfzy1F+iEK5/5CR6oRKptaeH/j17CFmx0qXx7Q32II8RGsEUZhU7a1X58MMPs2nTJt58800e9cJDg18Q+AijTkdA0AlPFSYTxqpq54IgJQSbVU5rP4GDO+beQUJwAn/Y+QfUIUHEpmVQe6ho8H7d0U7MBiuZC52YUnqb4LnL4Yt/wdLb4fYNEJk+iad3j+rCfag0WlJmzZm0PSOuuQZlZCRtjz8+aXtOFCEEmfNjqTtiLyx4IhVdFbxw+AVWZ69mfux8t9aOGbDHe+Iw7tu2DSwWQs51TRB0NOoQgsEaYA5sVsu06kz2ve99j7179/Loo49yzz33eLyeXxD4CKOub4RpyFRZCRYL2vyRgiAm2W43ba/rnZTzeUKQOohfLPsFZZ1lvHj4RVLmzKPhaMmgn6CysBV1gJLUWVHDJ1Ztg0fPgsZCuOpxWPV3UGlHbjCNqD6wj9TZc0ftO+0LFEFBRN1yC7otWzGUuFbhdSrJWBCD1WLjWEnHsOs2aeN3X/6OYHUwP1rqfiasSq0mNiPLM0Gw+XOUUVEEzndNCHU26AiLDUSlOW6ilFJOqUYwGfgFgY8w6nQjTEMOR3GAE40gIj4QpUpBW513Emh8zXlp57EidQWPHHiE4KwULCYjTeVl2GySqgOtpM+NPl7C12aDbX+D56+AgHBY+xksuG5q/wAX6GxqoLOxftLMQkOJvOF6FCEhM0IrSMwJRxukGlGEbl35Ova17ONHS35EVEDUKLPHJiE7j6bKcmw295MtpdlM39athKxY4VLYKAxEDJ1gFpI2G9Jmm7JkssnALwh8gMVkwmI2jYgaMpaWglqNJiNjxByFUkFUUjDt9TNDEADcv+x+AF7q/QCAY4eLaaroRt9rJsthFtJ3wqvXw6f/B7NXw12bIa5gqo7sFpV7dwGQvWTy+yUpw8KIvOEGej/egLHSu1U4vY1SqSBtTjQ1xW3YbPYIn05DJw/tfYhFcYu4MufKCa+dmJuP2aCn/Vit23P79+3H1tNDyMoVLo23mm10tehHOIodLVmVKrXbZ5gp+AWBDzD226N/TtQIDKWlaLOyEGrnL6jo5OAZoxEAJIYkct/C+9jctp2AxBiOHSqisrAVpUpB+txoaNhvLxhX/ilc8me45hnQTr/M6dGo3LeL6JQ0wuPGjzbxBVG33IzQaGh/8skp2d8dMufHoO8101TZDcBDex5CZ9Lxm+W/cctBfCJJefaHhoZS901kfZ99htBoCDl99FIWQ+ls7kfaRkYMOUyefo1gFIQQUUKIT4QQZQPfnXYeEUJUDzSgKRRC7HF3/kzDUR/lRB+B8ajziCEHMSmh6HvN9Pd4tyGHL7mx4EbyI/MpCW6iobSEiv2NpMyKRHPwBXjqQrtZ6LaP4NS7p0WWsKsY+3XUlRwiawq0AQeq6Ggirr2W7vfew9zQMGXncIX0udEoVQoq9rWwu2k36yrWccucW8iJzPFo3fC4eILCI5wmLY6FlJLezZsJWn4qCidh3M7oaHREDA1/gHNoBAq1XxCMxi+AT6WUucCnA7+PxsqBpjRLJzh/xmDsHyhBPUQjsHZ3Y2luJsCJo9hBdIp9fNsMcBg7UClU/M9p/0NVWCcWk4melhqybB/BBz+AjDPtoaGpI+sQTXeqCvdis1rJXjy1bbSjb78NgPann5nSc4yHJlBF6uwoKva18LsvfkdySDJ3L7jb43WFECTnz6beTY3AVFmJubaW0HPPdXlOW20fCpUYGTFkNtuTyaZZjos38VQQrAYcrZWeA66c5PnTkuMF544/iRzPKB5DI0h2CIKZYx4CWBC7gLOWr0ICNnMtmW3/hRW/hBvfhGAPGtJMIZX7dhMYGkZinm+qjbqKOimJ8NVX0PXGG5hbWqb0LOORsyQOXZeJ/gbJb077DYEq7/SNSMqbRXdzE7ou10t0O+o1hax0LWwUoKW2l5jkkGHtKcGuESjV6mlf8sMTPBUE8Y72kgPfR6sNIIGNQoi9Qoi7JjAfIcRdQog9Qog9ra2tHh7btzhKUA81DRlcEAQBIWqCI7QzymHs4HuReUhVBEZZCjc+Cit+Me2yhF3FZrVStX8PmYuWTounwJi770ZaLNPeV6BPbsEqLFxs++aYJabdJSnffT9B78cbCFy8GHV8vEvjpZS0HeslJm2kD+tkDx0FFwSBEGKTEOKgky/Xc8XhDCnlYuAS4D4hxNnuHlRK+biUcqmUcmlsrG9rvniKQyMYahoyVVSgCA1FNc4LMzo5hPaZpBFYTPDRL9C/9nvUymyEqZ3/tBVP9ak8oqG0BENfL1lTbBZyoElLI3z1arpee33aagUmq4n/2/u/tERXEduY5XF9oKHEZeagVKupd9FPYKyswlhaStjFrmer97QZMPZbiHMqCMwntaMYXBAEUsrzpZRznXytA5qFEIkAA9+dvkqllA0D31uAdwDHO8yl+TON4xrBcUFgLK9Am509rnoZkxJCZ+P0LzUBQHe9vYPYzkcoj/keCk0GCgmffvk2B1oPTPXpJkzlvt0olKpJqy/kCjH3DGgFT0xPreDxoscp7yrnlNPy0XWaaKnxnp9LpVYTn5XrskbQu9FuFgp1oyJna639vLEnCAKbzYbNap2y0NGZ0qryPeCWgZ9vAdadOEAIESyECHX8DFwIHHR1/kzEoOtDpdGiGhImaqyoQJMzdg12sAsCm03SOc0rkVLxGTx2FrQcRl79DBXd80mZNRulWk1OVyS/2fEbjNaxK1JOVyr27iJl9ly0QS72UZgENGlphF+5mq7XXsPc3DzVxxnGkY4jPFX8FJdnXc5FK85AoRRU7PXuM11S3ixaKsuxmMaPqOv5eAOBixa5VGTOQWttLwqFIPqE8tO2wRyCqdEIZkqryj8BFwghyoALBn5HCJEkhFg/MCYe2C6EOADsAj6UUn481vyZjlGnG/YhYunsxNrejjZ7/FA6R+RQa+00NQ/ZbPD5g/DCNyA4DtZupiPqQjqb+slblkJKwVwKehOo7K7k3/v/PdWndZuupkY66o9NSRLZeMTcey/SZqP98Sem+iiDGK1G7t9+P+HacH6+7OcEBKtJmRVFxf4Wr5qHkvNnY7VYaK4sH3Ocqboa45EjbpmFAFpre4hKDj6eDT/A8RyCqU0mm9atKqWU7cB5Tq43AJcO/FwJLHBn/kzHpO9HMyRiyFRRAYDWBY0gIj4IdYCSluoeCk5P9NkZJ4SuHd5eCxWfwrxvwuX/AE0wZesqEAKyFsai715EzYv7uS75Kp479BxnJZ/FssTp96E6GhUD2cTTxT8wFE1KChFXXUnX668TvfZOt554fcXD+x6mrLOM/5z3H8K14QBkL45l8wvttB3rG2FqmShJefZa/A2lJYMtUp3R87H7ZiEpJa21fWQuHNk7w2q2C4L2h/6G6ehRd448LtqCWSTcf79LY/2tKmcgxv7hGoGxfEAQZI8vCBQKQVx6GM3VPT4734So22PPEq7eZi8W943HQROMlJLyvS0k50cSFKYhfd5CAC5TnEZ6WDq/2vErekzT7G8Zg8p9O4lOSSMifuo/ZJ0Rffc9SClpnwY1iHY27uS5w89xXf51g32sAbIWxCIUgnIvmoeCwiOISEgc10/Q8/HHBC5YgDrR9Yeo3g4DBp3ZuaN4IIdgqkNHT9QISkpKuOeee7jmmmt45JFHPF7/5HaFTxEmfT+awCGCoKICRVAQKhdfnPGZYRRurMVisg6rgjglSAm7noAN90Noor1sdPJxJ2pbXR/dLXoWXZAGQGxahj0T9OBB/njDH7lp/U088NUDPHj2g1P1F7iMvreHY4cPcsoVV0/1UUZFk5JMxNVX0/nGm0TdfjualJQpOUe3sZtfbf8VGWEZ/Hjpj4fdCwhRkzIrkvJ9LSy/MstrH6LJ+bOp3L8HKaXTNQ1HSzEeOUL8r37l1rptA2ZYZ6GjFosZpVpNzK9ce3L3FSe2qiwoKODRRx/FZrOxdu1aj9f3awQ+wNjfP0wjMFWUo3EhYshBfEYYNpscjGSYMox98NYd8NFPIftcuHvLMCEAUL63BaEQZC2yh/QKhYL0+YuoKS5kTtRs7l5wN+ur1rO+cr2zHaYVFXt2Im028k4dv6XhVBLz7XsRCgWt//rXlJ3hga8eoF3fzp/O+pPTxLGcxXH0tOq9+hpOyitA39NNV3Oj0/vd760DlYqwyy51a92W2h6EQgwmdA7FarYLgqlktFaV7733HmeeeSbnnee5dd0vCHzACI1gIHTUVeIzwwCm1jzUcgSeWAmH3oHzfgPXvwpBw0sJSykp39NM6qxIAkOO1+tPn7cQfU83LTVV3DnvThbELuAPX/2Bhr7pXS+nbNcXhMXGE5fp+v/VVKCOjyfq5pvoef8DDF62W7vC+xXv81H1R9y78F7mxDhv2JO1KBaFSlC6y3sRToN+Aif5BNJqpef9Dwg56yxUUe6VvG6t7SMqMcip9m01m1FNsaPYWatKgCuuuIIvvviCl156yeM9/ILAB5j0/YPlJaw9PVhaWlxyFDsIDtcSEqWluWqKBEHRG3YhoO+Em96Fs34MipEvldbaXnraDGQvGZ4Q7oi/r9q/B5VCxR/P+iMSyU+3/BSz1TxinemAsV9H9YH95C47bcrtwa4QfeedKEJDaf3b3yd136ruKn7/1e9ZHLeY2+fePuq4gGA1GXNjKNvdPFia2lOiU9LQBgU79RPovvoKS0sL4avdyXN1OIp7iE0daRay2axIKadcI3DWqvLzzz/ne9/7HnfffTeXXuqeBuQMvyDwMjabFZNeP6gRGAcihjRuaAQACZnhky8ILEb48Mfw9p2QuADu3gZZ54w6vHxPCwqFON57YIDgiEgScvIG6/mnhqby29N/S1FbEf/c90+f/gkTpXLvLmxWC3nLp7dZyIEyPJzoO++kb8sW+vfsGX+CFzBYDPx4y48JUAbw4NkPolKM7WLMWxZPf4+J+iOu1wgaC6FQkJg3y6lG0PPeeyhCQ13uPTA4r82Avtc8qIUPxWa1N8OZakHgjBUrVvCvf/2Lxx57jPvuu8/j9fyCwMuYDQaAQR/B8dBR98rxxmeG0dthmLyS1F218PTFsPtJOP27cMv7EDa6c1vaJGV7mkmdE0VA8Mg3StbiU2isKB0sFHZRxkWsyV/Dc4ef4/Njn/voj5g4pTu/ICQyisScqS0y5w5RN30LVWwsLQ/9zasx+6Pxp11/oqyzjP931v8jIXj8qKr0edFoAlWU7mry2hmS82fTVleLvu+478Gm09Gz8RPCLrkEhda91qeO/gkJ2eEj7tms9uz+qc4hmAz8gsDLOJrSDGoE5RWIgADUSUlurROfMeAnqOr27gGdUbrR3ku4vRyuexEu/AMox37x15d20tdpJP9U5x8I2UtOBSmp2n/8afUnp/yEgqgCfrX9VzT2OXf4TQUmg57qwr3kLDsd4cQENl1RBAYSc9996Pfvp2/z5z7d68PKD3mr7C3umHsHZyaf6dIclVpJ9qJYKgpbMZvcbzXpjNTZ80BK6g4fr2fV88knSL2e8NVXuL1eU2U3aq2SqKSRjmJpHcgqPon7EDiYOa/6GYKpvx84XoLaWFGBJivT5Z6pDmLTQlEohG/NQzYrfPp7ePlaCE+Fuz6Hgstdmnp0VzPqACWZ80cm4QDEpmcSGh07mKAFoFVq+es5f8Uqrfxk60+mjb+gav9eLGbTjDELDSXi6m+gSU+n5aGHkAPlELxNZXclv/vydyyKW8R3Fn3Hrbl5y+IxG6xUn9DPeKIk5OSi0mg5NkQQdL32OpqMDAIXu18bqqmym/jMMBSKkX4hq9WKSq1GeNBhbaZw8v+Fk4zRIQgC7SF1xopyl0pLnIhKoyQ6JYQmXwmCvlZ44SrY9ldY+C248xOIds2PYTZZqdjXQvbiuFHzHIQQZC0+hZqi/cPqw6SFpfG7039HUWsRf9z1R6/8KZ5yZMcWgiMix8xYna4ItZq4n/0UU0UFna++5vX1e029fP+z76NVavnz2X8e1y9wIkl5kQSHa7wWPaRUqUnKL6DukF0QGI6Wot+/n4jrrnPbyW8yWGiv6yMha6RZCOw+AqVG4/TeyYZfEHgZk94uCDRBQVj7dFgaGt0KHR1KfGYYLdU9g7ZKr1H7lb1g3LGdcMW/4cr/gNr1JiLVB9owG6zkLxu7pHbWklMwGw3Dnt4ALsy4kDvm3sEbpW/wRukbE/oTvIVB10fV/t3kn372tOg9MBFCzj2XoOXLaXv4YaxdXV5b1yZt3L/tfo71HuOhFQ+55Bc4EYVCkLssgdqD7Rj6vKMBps2ZT2ttNf093XS99hpCoyH8SveihcAeni3laP4BKzarBZXaLwj8TIDBxvVBwZiqKu0/uxE6OpSknAjMRqv3OpZJCV/+x146WhUAd3wCi29ye5mjO5sIidSSnDd2i+m0OQtQabVU7ts14t53F32XM5LP4P/t/H8UthS6fQZvUbbzC6wWCwVnjB4dNd0RQhD/y19g7e2l9b//9dq6jxx4hM/rPudnp/yMUxIm3m40b1k8NpukfJ93Sk6kzLaXWjhWuI/u994j9OKLUEW63+68obQLISDRiUbQ3doMEr8g8DMxTHo9YHcWO2oMuRs66iApLwKA+qNdnh/M0AOv32wvFZF3sd0fkDjf7WX6e0zUHu4gb1k8wolddSgqjYb0eYuo2LMLaRuu1SgVSh4860ESgxP54ec/pFk3NaWVj+z4nIiEROKzc6dkf28RkJ9PxLXX0vnyKxgrKz1e79OaT3n0wKNcmXMl18+63qO1YlJCiEwMpnSnd6KHErJz7A8YG9Zj6+sjcs2aCa1TX9pJbFoomsCR5q6O+joAlJqTP2II/ILA6xzXCIIwVVYg1Go0qakTWis4XEtEfBANZR7GYTcdhMdXwJEP4YLf2yODAiMmtNTRnU1ImyRvlGihE8k79XR621tpLB+ZARuuDedfK/+FzqzjB5t/gN6in9CZJkpfRzu1h4opOHPFjEgiG4/Y730XRUAAzQ96VteptLOU+7ffz7yYefx6+a89/rcRQpB/ajyNFd10Nfd7tBbY/QTJ+bOpKzuCNjeHwEWL3F7DYrLSXN1D0ihabUf9McCvEfiZICZ9PwiBWhuAsbwCTWYmwoOmFkm5ETSUdU08O7PwZXjyfDDp4NYP4IzvwQTf2FJKSnY0kJAVNqKBx2hkLz0VpUrF0S+3O72fE5nDn876E4faD/HLbb/EavNOmKErHPliK0jJrDNWTNqevkQVHU3Mt7+NbstW+rZtm9Aazbpmvr3p24RoQvj7ir+jVboXlz8as05LRCgEJV94p8xIQkQ0PUIScNWVExJUzVU92CyS5NwIp/c7GuoQCgUKN6P9Zip+QeBljP39aAODEAoFxoqKCfsHHCTnRWAyWGk75mbxLrMB3vsuvHsvpCyFu7dCumcNxZsqe+hs6qfgDNdzIrRBwWQsXErpV9tHmIccnJt2Lj875Wd8Wvspf93zV4/O6A5HdmwhPiuXqKTkSdvT10R960Y06ek0/eEP2IzudYjTmXXc9+l99Jn7+O95/yU+2LXG764QHK4lY140JV82YfVC8ENI8SEAenMyJzS/vrQTBCTmOI8Yaq8/Ni2EwIxoVSmEiBJCfCKEKBv4PkLPEkLkCyEKh3z1CCF+MHDvt0KI+iH3PC+aMcU4Cs7ZDAbMx45N2D/gIDnf/k96rKTD9UkdVfDUBbDveTjzR/Z6QaGev6kP72hArVWSc0JtofHIP+1M+jraaSg9MuqYb83+Ft8q+BYvlrzISyWeF9Eaj9baaporyyk4c4XP95pMhEZDwv/+BnNNLe2PPebyPIvNwo+3/JjyrnIeOuch8qO8n2E9+4wk9D0maorbPVrHVF2NessOVAolx1zsY3wix0o6iUsPQxs00gcgbTbaamumRcP6mdKq8hfAp1LKXODTgd+HIaU8KqVcKKVcCCwB+rE3sHfwd8d9KeX0r1U8Do4S1KaqKpByQjkEQwkO1xKdHMKxEhf9BEfWw2PnQFcNXP8anP+/oPT8BW3SWyjf00zuKfFoAtxbL3vJMpRqNUe/HNtc8ZOlP2Fl6koe3PUgn9V+5slxx+XgZxtRqlQUnLXCp/tMBcGnn07Y5ZfT9sSTLjmOpZQ8sPMBdtTv4NfLf80Zyb5JrEubE0VwuIbDOzwzD7U/9xxKlYq0OfOpKtzndnkNY7+Z5uoe0mY7r1La3dKM2aBHMQ0EgYNp3aoSWA2sGPj5OeBz4OdjjD8PqJBS1ni477TFpNfZI4Yq7G9ATdbEVNehpM6OomjzMcxGK2rtKOqq1QKf/Q52/NNeMO6bz0Nkhsd7Oyjb04zFZGO2G2YhB5rAIDIXLqV05w5W3HLnqPH6SoWSB89+kDs23MFPt/yUR85/xCdtLi0mE4e3bSbnlNMICnNuGpjpxP/i5/Rt3UrT//6WtOefG9OO/vD+h3mz9E3unHcn1+Rd47MzKZQKZp2eyL6Pa+jrNBIS6b7/wdLRQffb7xB+5WqyTj2Nyif/S2djPVFJrjfoqT/ahbRJUgucC4LWmioAlEMeoLa9XkrbMe/2EY9JDeGsb+a5NHa6t6qMl1I2Agx8H89msAZ45YRr3xFCFAkhnnZmWnIghLhLCLFHCLGntbXVs1P7EGO//rhGIASajAyP10wriMJmkTSUdTkf0NsEz19hFwJLb4fbN3pVCEgpObStgaikYOIyJtaDNv+0M9F1dlB/5PCY4wJVgfz3vP+SGprKdz/7LkWtRRPabyzKd3+Joa+Xeee61+B8JqGKjibuxz+if/duut95d9RxTxU/xRPFT3BN3jV8b9H3fH6ugtOTkJIJO407X3oZaTQSdeutZCxYAthLhLhDbUkHaq2S+KyRFUcBWmqqEEIx7TUCnU7HkiVL+OCDDzxef9y/VAixCXAWK+hWPzghhAa4AvjlkMuPAL8H5MD3hwCnRc6llI8DjwMsXbrU96UWJ4hJryMiPgFTVRXq5GQUXkhRT8wJR6lWUHOonfS50cNvVm2DN28HYy9c9RgsmFhM9Vg0V/XQWtvLOdfnTTiUMGvJMlRaLYe3brYXDhuDiIAIHr/wcW756Bbu3XQvT1/0tFdt1sWfbSQsNp60ue7nUcwkIq65hu5319Hy5z8TsnLFiKSrV4+8yj/2/YNLMi7h16d6HibqCuGxgaTNieLg1noWX5SOUuX6s6i1u5uO558n5Pzz0GZnowWiklKoPrCXJZe5llkspaT2UDvJ+ZEolc73bq2pIjIxadi/h6tP7r7ixFaVAA8++CDf/OY3vbL+uP8LUsrzpZRznXytA5qFEIkAA9/HSh28BNgnpRzMHJJSNksprVJKG/AE4H07wCRj9xEEY6quRpPpuVkI7HWHUmdFUl3UdtwearPB9r/bNYGAMFj7mU+EAEDR5jo0gSqXcwecoQkIJP+0szj65TZMhvHzBeKC4njiwicIUAVw9yd3U9PjHWtiV3MTtQcPMG/lBTOq0uhEEAoFCb/9X6x9fTT//g/D7r1f8T4P7HyAFSkreOCsB1BOYnmN+StT6e82UbHfvUzj9meewdbbS+x3vzt4LWPhEo4dLsZsNLi0RkeDjt52Axnzokcd01pTSWy6d9673sBZq8pNmzYxe/Zs4uO9E9nl6TvhPeCWgZ9vAdaNMfZ6TjALOYTIAFcBBz08z5Rj6u9HHRhoFwReMAs5yJgfQ2+7gY4Gnb1z2Gs3wqbfQsEV9izheN8UTNN1GanY20LBGYluO4lPZN7KCzEb9OM6jR2khKbwxIVPYJM2bv/4diq7Pc+YLf5sA0IomLPifI/XmgkE5OUR8+176Vm/np6PPwbgvYr3+PWOX7MsYRl/XfFX1IrJzZ5Nmx1FeFwgRZ/VuTzH0tlJ5/MvEHrJxQTkH9cOMxcuwWo2j6hnNRpVB+xVUDNGqZpr0PXR09oyrQSBs1aVmzdv5quvvuLll1/miSeewDZKaLareCoI/gRcIIQoAy4Y+B0hRJIQYjACSAgRNHD/7RPm/1kIUSyEKAJWAj9kBmO1mLGYTagl2Pr70WRmeG1txwu3anuxPSqobCNc/CBc+yxoJ2a3d4WDW+uxScm8c1x3xo1GUn4BkUkpHPzsE5fnZIVn8dRFT2GVVm77+DZKO0snvL/ZaKDo0w1kL11GaLTzD4KTkZi1awmYO5em3/4fb+98hl9v/zWnJJzCw+c+7LWEMXcQCsH8lSk0V/W4XGa946mnsOn1xH5neBnslIK5qDRaqgv3ubROVVEbcRlhBIc7/7ubKsoASMieWlPQUJy1qnzggQf4xz/+wQ033MDatWtReKjdejRbStkupTxPSpk78L1j4HqDlPLSIeP6pZTRUsruE+bfJKWcJ6WcL6W8wuF4nqk4SlArdQOlqL2oEQSHaYiLNVK1/SDYLHDbR7D8nglnCbuC1Wzj0LZ6MubFEB7renXS0RBCMO/cC2koLaG97pjL83Ijc3nm4mdQCRW3b7idw+1jO5xH4/DWzRh6e1hy2ZUTmj9TEWo1SX/6I2ZdL31/+AtnJp3Bv8/9N0HqoCk706zliai1Soo+H/91YG5uoeOllwlbtWpEJV+VRkPqnHlUFY7frlPXZaSluofM+aObhRrLjoAQJOTMjNpTt956K6tWrfJ4nZPbSDrJOArOKXrsTzne8hFg6od37yXb8Cot5my6r/kEUn3vTind3YS+18z8FZ5rAw7mnH0uCqWS4s0b3ZqXGZ7Jsxc/S5AqiDs33Ol2xVJps7F3/Tris3JInjXHrbkzHSklL+q38MLZklPKJP/XegYBqoApPZMmUMWs0xMp39NCX+fYGdCtf3sILBZiv+u8KU7mwiV0NTXS0VA/5jrle+0+iezFowc3NpYdJTo5dbCx1NcFvyDwIo6Cc6KjExEYiMobjpy2cnutoAOvknOOPcql/LDvO3vZbJK9H9cQkxpCSoH7JX5HIyg8gqzFyzi89bNhDWtcITUslecufo7IgEju3Hgnn9S4bmKqOrCXzoY6llw2sdo0MxWrzcr/2/n/+Me+f2C75lKCzjyd9j/9BcPRkUUAJ5sF56YiJRR+UjvqmP59++le9x5Rt9+OJi3N6ZjspcsBe1jwWJTtaSY6JYTIBOcf8lJKGsuOkpg7y+n9kxm/IPAijqY0tLaiSU/3PCrl0Lv2qqG9jXDjm4St+jHxmWGU7fFOXfexqNjbQneLnqWXZnj9g3PhRZeh7+nm8LbNbs9NDEnkhUtfID8qnx9//mNeOPyCS/P2fvAuIVHR5C13rd/uyUC/uZ8ffP4DXj36KrfOuZU/rXiQ5Af/jCI8jPof/Rhbv+eVQD0hPDaQ/GXxHNpWT3/PyIcCabXS/MADqOLjiblr7ajrhMXEkpCdS9nOHaOO6WnT01zVQ+7S0bWBrqYGDH29JOZOH//AZOEXBF7E4SOgqdkzR7HVDB/fD2/cArH59oJxufYol9yl8bTX9dFe790sx6FIm2TPR9VEJgaTtSDW6+unzV1AXGY2e95/e9RCdGMRFRDFUxc+xXlp5/Hn3X/mwV0Pjlm1tLmynNqDB1h08eXTon7MZNCub+eODXewtW4r9596Pz9e+mMUQoEqOprkP/8ZU2UlTf/3f26XZ/A2iy9Ox2KxceDTkb6CrrffxnDoEHE//SmK4LFNNTnLTqepooyeNucPSaW77VHrOUtG19IdtbD8GoEfjxjUCBqbJh462l1v7yD21X/4/+2deVzU1d7H399h2GQREFAQARfMNFxyy8zScjc1M9OeHrV7M8uy7m3f7tPtduuW5uve9v3pumSLedXcci1SMlNRDFERlEVcQEAERhhmmPP8wfjkwjLAsMl5v16+5jfzO3N+3zMHf9/fOed7vh8GPFi+KOz3u55B14FtMbgIh36uv3X11P055J000W9MRLXiM7VBROg/YTJnT50gJe7XWtXhYfRgwS0LmN59Ol8c+oJHtj5Cfkl+hWVjv1mCh7cPvUY0+5yGDpFwJoGpa6eSkp/CW0PfukJYxmvQIALnPsK571ZzdvHiRrKyHP92XnTpG0xCTCYlpt+nPC1ZWWS/uQDPfn3xHVd9v0UNKM+sm/zrjivOKZvi0I5ThEb5VRn0kJEQj6ePL4FhFU9BXc1oR+BESu0jAleLFffaLBQf/RE+vrlcSGby/8LY+WC8dGeyp7cbHXsFkvTracosTtYypvw/ze71qbQO8qxxltGa0HXgYFoHt2X3d8tr/VTqYnDhmf7P8PKgl9l1ehdT104lMTfxkjKZhxNJi4+j/4TJuLdqvCiZhkApxbdHvmXmhpkYDUYWjVnEsPBhFZYNnDMH7+G3kTX/TUy/VD23Xt/0HR2JxVzG/h/KRwVKKU69+BeUxULoa685NDUZENqe4I6dORQbc8W5k8n5FJwppvvgkCu/aEcpRfqB/YRf1+uq32hYES2vxfXIhcViY5mtZiMCmw1+mg9LJoFXIMz+EaIrT/7VfXAoJSYLx+Kdn3PpyO4sco4X0W9cJIZKtuA7A4OLC31vn8Sp5CROJNUuHPQCk7tOZtHoRdiwMWP9DFYmlye3VUrx89dL8PLzp8/ouofYNWVKrCW8tOMlXvnlFQa0G8DX476me5vKNxmKwUDoG/Nw79SRE39+nNK0tIYz9jICw7zpfH0Q8ZszMOWbyV/2LabYWIKfehK3iAiH67n2pqFkHUsh7+SlG9USY0/i5mmkUxXRQnknjmM6m0d4dO/aNqNZox2BEyktPo9BBINSjoeOns+DL++GH1+D6CnlqSKCqs6r0+HaAFoHeRK/9bhT53gt5jJ+WXmU4AgfrhlQ+3QSjnLd0OF4+vjyy/LL8xDWnOigaL65/Rv6tO3DSzte4umfnuZgXCyZhw4wcNLduLo3brhkfXIw9yDT1k5jVcoqHuz5IO/f9j5+Hn7Vfs/F24uw998Hg4GMWQ9gbcRkjoMmdcFmU/y89Dey5s2j1aAb8L+nZlrJ3W68GUQuGRUUnS0p3xk/KARXt8rTaKQnxAMQ2bPmspdXA9oROBHz+fMYxYAxMBAXHwd2+2bGlU8Fpf4E4/4Jd34CbtXHL4tB6HVbB7LTCjh99Fy15R1ln/2JbPCUqHpZG7gcV3cPBk6aSkZCPGm/7atzfQEeAXw0/CMe7fMoW9O28M0nr+Pm70v0baOdYG3Tw2qz8vH+j7l33b0Ulhby0fCPmNtnbo3yBrmFh9Phk4+x5uWR8cBsygprqITnJFoHedLzpnYkJxRS5BtRPiVUwyka74A2RET35kDMFmxl5cEDv/2YiVKKnrdWvRcmNT4Ov3Yh+AbV33RoU0Y7AidSWnweV5vCLbKa4axSsOtT+HwUIPDHDdD//hrtEu42KAT3Vkb2bqo8BrsmFJ0tYd/GdLr0DSa0i59T6nSEXiPH4hvUlm1L/43NCXrFRoOR2T1n85rPI7Q+Z2BT5FFe3/MGhaWNc4OrL1LOpjDz+5m8F/8eIyJGsGLiiloLynhGRxP29tuYU1I4PmcOZUUmJ1tbPcpmIzT2E1xLC0i9+VGMIZXP51dFr+FjKMrN4di+PZjPW0jcfpJOfYLwDax8kbi4qJCMhPj/X3BuSjQLqUrNpZjPm3ApLa16odhcBP+ZBeufgs7D4MGfoH3fGl/L1d2F3sPDSfsth9OpdR8VxC5LRikYNKlu0po1xejqys333seZtGPs3+QcgbqivFyOrtlMWI9obr51Mt8e+ZbxK8ez+ujqRg+XrCsmi4kFuxcwZc0U0grSmH/zfObfMp/W7nUT2PEechPt58+jeF88x2fNavCRQc4HH1KyZQO9rrGQna1I+vV0rerp1HcAXv4B7N+8nn2bMygtttJvbGSV30nZ/Qu2sjKuGTSkVtesT5qLVKXmIsyFhRhLLZUvFJ9Jgk9vhcQVcOv/lEtJtqpYJckRet4ahqePKztXHavTDS4lLpuj+87Q//bIKp+c6ouuN9xERM8+xH69hMK8nDrVpZRi08fvUGa1MvKBuTw94Bm+uv0r2nu358XYF7lvw30czqtcO7mpopRi3bF1jF85nsUHFzOxy0TWTlrLmI5jnHYN37Fjaf+vf1KcmEjGH/6I9ayD8qh1JHfhQnLee4/Wd9xBv6cmE9K5NbHLkjGdqzr1REW4GI30vG0UafFx7NsUT5d+wQSGVT1Ne2Tnz7QObktwx4Z9CKoJTV2qUnMRJefyyyOGKhoRJCyH1Y+BqydMXwmdhtb5em4eRvqN7cj2b45wdO+ZWoV7FuaVEPPlYYIjfOgzonHip0WE2+6fw+JnHmXDB29x1wuv1DqEL37TOlLj4xh232z8Q9oD0KNND5aMXcKqlFW8FfcWd6+5m1GRo5jTaw6d/Do5sylORylFzPEYPtj/AYfzDtOjTQ/eHvY20UH1c1PwHTkSeedtTvzpz6TdPZUOH7yPe1T9JWDLW7yE7Dfm4TNqFCGv/h1xMXDrjGv5+tVdbF14kNsf7Y2hhutVvUfdzs6VyzEX7mTg+KodZUFONum/7aP/hMlVhqn+uPATstPrngb9YoIjOjHsvtkOlW3qUpWaiyg1mTDaLgsdtZph3ZPwn/uhXTQ8tN0pTuAC193SnqBwH7Z/c+SSDTmOUGa1semzA9isihF/7FGv4aLV4d8ulKHTZ5GREM/uNZdnK3eMk0cOE7PoMzr26UefUZeGixrEwJ1Rd7Jm0hpmRc9iW+Y27vjuDp7d9ixH8486owlOxaZsxByPYdq6aTz242OYLCZeu+k1lo5dWm9O4AI+w4YRsWQxtpJi0qbdQ+GPNU8FUh3KZiPnww/J+sc/8BkxnPYL3kTsu7792rZiyN1RHD90lrjv02pcd25mGQZjT8pKk1C2qkc1+zaUyzw29c2Gl48IYmJiGDJkCA899BAxMTF1rl+PCJyI2VyCv03hFmaPUMjPgG/vgxNxMGguDH8ZXJwrAmIwCMP+uxvL39jD1kWHGPtQtEMRP0opflh8iNPHChg5qwd+bRt/s1XP4aPJSPyN7V8tok1YBzr3Hejwd8+eOsGqN/+OT5s2jJn7ZKUjitburXns+seY3n06CxMX8tXhr1ifup6B7QYytdtUhnYY2uBCLRdzznyOVSmr+CbpG44XHqe9d3teufEVxncej9HQcP9dPXv1ouOyZRx/5BEy5zyM37SptHUg1YMjlBWZOPX8cxRu3oLvhPGEvvoq4nrpb979plBOpZxj15pU/IJbEdXfsQSOpnNmNi88SJvwIZw9nkjM4s+Y9OxfKyxbWnyehK0b6TpwML6BVadScfTJvb64XKpSRPD29qakpISwsLpnB9aOwEkopbBYLbh7eSNubpC8GVY8ALYyuHsJdJ9Qb9cOCvfhxru6ELssmV9XH+OGO6qe61Q2xbavj3BkVxYDJ3Qiqp9z5O7qiogwes6fOJd1irX/msfEp/9CZK/rq/1e3slMlr/2P6AUdz7/Cp7e1Yfu+nv483jfx5nZYyYrklewLGkZT8Q8QbBnMBO6TGB05Gi6+tdeo7kmWMos7Dy1k+9Tv2dT+ibMZWauD76eR3o/wsjIkY3mmFxDQoj88kvOvP0OeQsXYor9mbYvvoD30KG1/l3O793LqRf/QmlGBm1feB7/6dMrrEuk/AGnMK+ELQsP4mI00KlP1Tfr0hIrGz5OwFJiZeKfbyA1roCfvvic5F07KowI2rH8K8znTfS7fVKt2tJQVCRVOWTIEG655RaysrJ44oknWLp0aZ2uUae5ABGZIiKJImITkX5VlBstIkkikiIiz130eYCIbBaRZPur8/IdNzDWUjMK8PDzgx9eg6VTwLd9uYxkPTqBC/QcFkb3wSHEbUjnl5VHsdkqXjw2F1vZ+OkBDmw7QZ8R4fQd4/jOzYbA1d2DO5//G/7tw1g57xXiN62vciH82L7dfPXSM5RZLEx+8e8EhLav0fUCPAKYFT2L7+/8nndvfZeogCj+feDf3LXmLiasmsC8XfOIPRFLsbV6neWacOb8GdYcXcNz259j2LfDeHjrw8Qcj2FC5wksH7+cRWMWMa7TuEYdnQAYPDxo++wzRHyxBHFxIXPOw6RPu4ei2J9rlDDQfCyVE089Tfp/3YvNXEL4558TMGNGlQ7FxdXAmIeiCQr3YcOnB9hfxQbK4sJS1r63n6y0Qob/oTttQr3pM2YCQZGd2Pjh21doFZxOOcLedd/R87bRtOvStLONViRVeUGRzN/fH7O55ovqlyN1iTYRkWsBG/Ax8JRS6gqZIBFxAY5QLlWZCewG7lFKHRSR+UCeUuoNu4PwV0o9W911+/Xrp/bsqV6RqCEpysvl4zkz6W80cXPUXuh9L4xdAG4NN+WibIqYL5M4GHuSkC6tuWFiJ0I6+yEGobTYSsrebHavTcV0rpRBkzrTe3iHJpubv6SoiPXvvklqfBxh3a/jhknT6NAjGoOLC8pm4/TRZPasXcmRnbEEhkcy4ckX8G8X6pRr55XksSV9C1sztrLn9B5KbaW4iAtd/bsSHRhNZ7/ORLaOpINPB4I8gyoVeVFKUWgpJNuUTXpBOqkFqSTlJZGQk8CJovIbU4BHAINDBzMyciQ3ht6Im4tbhXU1BZTFQv6KleR8+CHW06cxhoTQetxYvAYPxr1bN4z+vz/HKZsNS0YGpl93UbhxA6YdvyAeHgTMmEHgg7NrNMVUWmJl8+cHSfsth9AoP/qPiyQ0yg+DiwGrpYzk3Vns/O4YJSYLw+/rfskI91x2FktfeByjmzvjHnua9t26c+LwQVYteBWjqysz33wfD2/vCq976NAhrr322tr/YPXIihUr2LhxI/n5+cyZM4ehQ4deUaYi+0UkTil1xUN7nRzBRZXHULkjGAS8rJQaZX//PIBS6nURSQKGKqVO2YXsY5RSVedXoGk6guwfV7Dko8+5xZhOvyefhutnNIodSikO/3KaHf9JocRkwc3DBbdWRs7nl2KzKYIjfBgytSvtOtUt7rwhUDYb+zd/z45vl1JcWIDRzR0vPz+KCwvLN+95eNJ33B0MvGMKRrf6uYGWWEuIy4ojLiuOhJwEEnMSKbRcGmPv5eqFl9ELNxc3jAYjFpsFc5mZAnMBpbZL8+yHeIUQHRhNz6Ce9G/Xn24B3TBI84rZsJnNFG7aTMHatRT9/DNYrQC4BATg4uODsliw5uai7E+qruHhtJ44Af+pUzEG1k4rWilF4vaT7FqbSnFBKa7uLnh4uWLKN2OzKQI7eHPbzGsrDBXNOpbCmn+9zrnsLNy9vDCbTPgGtWXKX17Fr13lG9easiNwhKbmCO4CRiulZtnfTwcGKqXmiki+UsrvorJnlVIVTg+JyGxgNkB4eHjf9PT0OtvtTHJ2beeH+X+j/1130XHaQ41tDpbSMo7uzSYrtQCruYxWfu5E9GhDSJfWTXYUUBmWUjOp+/ZwMukgpvx8PLy9CY3qRsc+/St9mqsvlFLkFOeQVpBGZmEmuSW55Bbnct56HnOZGavNiruLO64GV3zdfWnj0YYgzyAifCOI8I3A261h7a1vyvLzKTl4kJKkI5QeO4bNZEJcXXEJCMCtU0da9emDW+fOTvubs5SWkZ6Qy8nkfMzFFrz9PQjr5k/YNf5VXsN83sTBbT+QnZZK246duWbwzdWuJWlHcOkXtwAVZSB7USn1nb1MDJU7ginAqMscwQCl1KM1cQQX0xRHBBqN5uqiJTmCaqOGlFLD62hPJtDhovdhwEn7cZaIhFw0NVT/GowajUajuYSGmJzcDUSJSEcRcQOmAavt51YDM+3HM4HvGsAejUajcYjmmpuqpnbXNXx0kohkAoOAdSKy0f55qIistxtkBeYCG4FDwDKl1AUZqTeAESKSTHlU0Rt1sUej0WichYeHB7m5uc3OGSilyM3NxcPDcQ0OpywWNzR6jUCj0dQ3FouFzMxMSkpKGtuUGuPh4UFYWBiul+3YrvUagUaj0bREXF1d6Vgb7fFmSPMKYNZoNBqN09GOQKPRaFo42hFoNBpNC6dZLhaLyBmgaW0t/p1AoG4yW80b3f6W3X7Qv0FTbn+EUuqKNK7N0hE0ZURkT0Wr8i0F3f6W3X7Qv0FzbL+eGtJoNJoWjnYEGo1G08LRjsD5fNLYBjQyuv2alv4bNLv26zUCjUajaeHoEYFGo9G0cLQj0Gg0mhaOdgR1RESmiEiiiNhEpNKQMREZLSJJIpJi12e+KhCRABHZLCLJ9tfKFObSRCRBROJFpNlnDKyuP6Wcd+znfxOR6xvDzvrCgfYPFZFz9v6OF5GXGsPO+kJEPheRbBE5UMn5ZtX/2hHUnQPAncC2ygqIiAvwPjAG6A7cIyLdG8a8euc5YKtSKgrYan9fGcOUUr2bW4z15TjYn2OAKPu/2cCHDWpkPVKDv+ft9v7urZR6pUGNrH8WAqOrON+s+l87gjqilDqklEqqptgAIEUpdUwpVQp8DUysf+sahInAIvvxIuCOxjOlwXCkPycCi1U5OwE/uwrf1cDV/PfsEEqpbUBeFUWaVf9rR9AwtAeOX/Q+0/7Z1UBbpdQpAPtrcCXlFLBJROJEZHaDWVc/ONKfV3OfO9q2QSKyX0S+F5EeDWNak6FZ9b/WI3AAEdkCtKvg1ItKKUfkNaWCz5pN3G5V7a9BNYOVUidFJBjYLCKH7U9VzRFH+rNZ93k1ONK2vZTntSkSkbHAKsqnSVoKzar/tSNwAKXU8DpWkQl0uOh9GHCyjnU2GFW1X0SyRCREKXXKPvTNrqSOk/bXbBFZSfn0QnN1BI70Z7Pu82qotm1KqYKLjteLyAciEqiUaqrJ2JxNs+p/PTXUMOwGokSko4i4AdOA1Y1sk7NYDcy0H88ErhghiYiXiPhcOAZGUr7I3lxxpD9XAzPs0SM3AOcuTKFdBVTbfhFpJyJiPx5A+b0mt8EtbTyaVf/rEUEdEZFJwLtAELBOROKVUqNEJBT4TCk1VillFZG5wEbABfhcKZXYiGY7kzeAZSJyP5ABTAG4uP1AW2Cl/b5gBL5USm1oJHvrTGX9KSIP2c9/BKwHxgIpwHngD41lr7NxsP13AXNExAoUA9PUVZTGQES+AoYCgSKSCfwVcIXm2f86xYRGo9G0cPTUkEaj0bRwtCPQaDSaFo52BBqNRtPC0Y5Ao9FoWjjaEWg0Gk0LRzsCjUajaeFoR6DRaDQtnP8DLBFml3AkcbkAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ 1.96113528e-01  6.01370805e-18 -2.63605221e-01 -5.55111512e-18\n",
      "  1.77160221e-01  3.14563190e-17 -1.19060856e-01 -1.66533454e-17\n",
      "  8.00112278e-02  9.62193288e-17 -5.37633963e-02 -1.33226763e-16\n",
      "  3.61177082e-02  1.18423789e-16 -2.42508535e-02 -1.48029737e-16\n",
      "  1.62641353e-02  1.85037171e-16 -1.08796787e-02 -1.99840144e-16\n",
      "  7.23597076e-03  4.19109192e-16 -4.75001812e-03  2.86807615e-17\n",
      "  3.02406838e-03  3.51570624e-16 -1.78196958e-03 -1.85037171e-16\n",
      "  8.24985919e-04  1.48029737e-17]\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ 1.96117887e-01  1.00725879e-18 -2.63614636e-01 -7.16272919e-18\n",
      "  1.77171840e-01  0.00000000e+00 -1.19076539e-01  3.58136460e-18\n",
      "  8.00334829e-02 -3.58136460e-18 -5.37957846e-02 -7.16272919e-18\n",
      "  3.61654118e-02  0.00000000e+00 -2.43215049e-02  0.00000000e+00\n",
      "  1.63690388e-02  0.00000000e+00 -1.10356189e-02  0.00000000e+00\n",
      "  7.46789801e-03  0.00000000e+00 -5.09504081e-03  3.58136460e-18\n",
      "  3.53739015e-03 -1.79068230e-18 -2.54572190e-03 -6.26738804e-18\n",
      "  1.96136916e-03  8.95341149e-19 -1.69083548e-03]\n"
     ]
    },
    {
     "data": {
      "image/png": "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oas+o/lCDcMuHKYwcmav74eZnDyMLEkmJG+rY8Iph7jnnnt499137Z4+Nzf3SxcnXal58+axd+/eXi+nt7TQVZ9xOmM9/tJK8OjFvV6WiFAUOYuhF47QXF/tgHRK9Z4Wuuoz6o5uoM4EMmpq1yMr2is4bTH+0srpPTpGulVWr17N+PHjmTBhAnfeeScA27ZtY+bMmQwdOvRLe+u/+tWvuOqqqxg/fjxPPvnkxedbWlq4++67GT9+PKtWraK+vp7Nmzdz/fX//3UKmzZt4oYbbqC1tZV77rmHsWPHMm7cOH77299enOadd95h6tSpjBgxgk8//RSA1tZWfvCDH1xc7+9//3sAvvGNb7B27dqL895zzz289957vd4eOnyu6jNiynZwPGgC6f37O2R5o6deQ+3WIOqOb4R59g3w5ZXWPQ4lhx27zMHjYOkvu5zk6NGj/OIXv2DHjh1ERkZSWVnJ97//fYqLi9m+fTuZmZlcd911rFq1io0bN5KVlcWePXswxnDdddexbds2EhMTOXHiBK+88gqzZs3ivvvu44UXXuDRRx/l29/+NmVlZURFRfHaa69x7733cuDAAQoLCzly5AgA586du5inpaWFPXv2sHbtWp566in+9a9/8corrxAWFkZGRgaNjY3MmjWLRYsWccstt/DWW2+xbNkympqa2Lx5My+++GKvN5vuoas+oargBLG2Yuri5zpsmaH9+pEZNIGYsp0OW6ay35YtW1i1ahWRkZEAREREALBy5Up8fHxIS0vj7NmzAGzcuJGNGzcyadIkJk+eTGZmJllZWQAkJCQwa1bbrQfvuOMOtm/fjohw55138uc//5lz586xa9culi5dytChQ8nJyeE73/kO69evZ8CAARfz3HDDDQBMmTKF3Nzci+tdvXo1EydOZNq0aVRUVJCVlcXSpUvZsmULjY2NrFu3jjlz5hAcHNzrbaJ76KpPyN+/gXAgakLvj593VBc7i9jTn1Fz9gwDYpIcumyP0c2etLMYYzr9cDswMPBL03zx549+9CMeeuihL02bm5v7lWV88fjee+9l+fLlBAUFcdNNN+Hn50d4eDgHDx5kw4YNPP/887z99tu8+uqrX1qvr6/vxZtQG2P43//9XxYv/ur7bt68eWzYsIG33nqLW2/t8sZwdtM9dNU3nN5GmRlIatpkhy42Im0+AGf2b3ToclX3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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from numpy.polynomial import Chebyshev as T\n",
    "x = np.arange(-1,1,0.01)\n",
    "fig = plt.figure()\n",
    "plt.xlim((-1.3,1.3))\n",
    "for i in range(6):\n",
    "    tmp = [0,]*6\n",
    "    tmp[i] = 1\n",
    "    t = T(tmp)\n",
    "    plt.plot(x,t(x),label=f\"$T_{i}$\")\n",
    "plt.legend()\n",
    "plt.show()\n",
    "\n",
    "from scipy.integrate import quad\n",
    "from math import exp\n",
    "from scipy.special import gamma\n",
    "def f1(x):\n",
    "    if type(x) == float:\n",
    "        return quad(lambda t: t**(x-1)*np.exp(-t),0,np.inf)[0]\n",
    "    else:\n",
    "        return np.array([quad(lambda t: t**(i-1)*np.exp(-t),0,np.inf)[0] for i in (x)])\n",
    "def f2(x):\n",
    "    return np.tanh(x) + 0.5 \n",
    "def f3(x):\n",
    "    return 1/(1+25*x**2) \n",
    "def f4(x):\n",
    "    return gamma(x*(b-a)/2+(a+b)/2)\n",
    "f = f3\n",
    "n = 30 \n",
    "a,b=-1,1\n",
    "zeros = np.cos(np.pi/n*(np.arange(n)+1/2))\n",
    "#f_z = np.array([f(i)[0] for i in zeros ])\n",
    "#print(zeros)\n",
    "#print(f_z-gamma(zeros))\n",
    "# 将(a,b)映射到(-1,1)之间\n",
    "coeff = np.array([2/n*np.dot(f(zeros),np.cos(np.pi/n*(np.arange(n)+1/2)*i)) for i in range(n)])\n",
    "coeff[0] = coeff[0]/2\n",
    "print(coeff)\n",
    "T_f = T(coeff)\n",
    "x = np.arange(a,b,0.01)\n",
    "plt.plot(x,f(x),label=\"$f(x)$\")\n",
    "plt.plot(x,T_f(x),label=\"chebyshev\")\n",
    "plt.legend()\n",
    "plt.show()\n",
    "\n",
    "import numpy.polynomial.chebyshev as C\n",
    "coeff = C.chebinterpolate(f,n)\n",
    "print(coeff)\n",
    "T_f = T(coeff)\n",
    "plt.plot(x,f(x),label=\"$f(x)$\")\n",
    "plt.plot(x,T_f(x),label=\"chebyshev\")\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 2.2.2 插值的应用"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### 积分中插值的应用\n",
    "\n",
    "数学上可以证明，梯形公式给出的结果可以有如下的渐进展开\n",
    "$$\n",
    "T(h)=\\tau_{0}+\\tau_{1}h^{2}+\\cdots+\\tau_{m}h^{2m}+\\alpha_{m+1}(h)h^{2m+2}\n",
    "$$ 如果$f\\in C^{(2m+2)}[a,b]$，那么系数$\\alpha_{m+1}(h)$在h足够小时是有界且对h的依赖趋向于0。\n",
    "因此$T(h)$可以展开成一个$h^{2}$的多项式。从而，可以通过对$T(h)$在不同$h$进行运算，然后进行多项式的内插/外推。所求积分值则由参数$\\tau_{0}$给出\n",
    "$$\n",
    "\\tau_{0}=\\int_{a}^{b}dxf(x)\n",
    "$$\n",
    "通常选取一系列严格递增的整数系列：$1=n_{0}<n_{1}<...<n_{m}$，令相应的积分步长为\n",
    "$$\n",
    "h_{i}=\\frac{b-a}{n_{i}}.\n",
    "$$\n",
    "比较常见的是选取$n_{i}=2^{i}$，最早Romberg即取了该值。再令\n",
    "$$\n",
    "T_{i0}\\equiv T(h_{i}),i=0,1,...,m\n",
    "$$\n",
    "将内插的m阶多项式记为$\\tilde{T}_{mm}(h)$，满足\n",
    "$$\n",
    "\\tilde{T}_{mm}(h_{i})=T_{i0}=T(h_{i}).\n",
    "$$\n",
    "$\\tilde{T}_{mm}(0)$即为所求$\\tau_{0}$的近似值。\n",
    "我们可以采用Neville算法，相当于取$x_{i}=h_{i}^{2}$，并外推到$x=h^{2}=0$。\n",
    "对于$1\\le k\\le i\\le m$，$\\tilde{T}_{ik}(h)$是关于$h^{2}$的最高阶为k的内插多项式，且满足\n",
    "$$\n",
    "\\tilde{T}_{ik}(h_{j})=T(h_{j}),j=i-k,...,i,\n",
    "$$\n",
    "将$\\tilde{T}_{ik}(0)$简记为$T_{ik}$,有如下的Neville迭代\n",
    "$$\n",
    "T_{ik}=T_{i,k-1}+\\frac{T_{i,k-1}-T_{i-1,k-1}}{h_{i-k}^{2}/h_{i}^{2}-1}\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### 微分中插值的应用\n",
    "\n",
    "Richardson extrapolation。该方法的主要思想是通过计算 $\\Delta_{1}(h)$ 和 $\\Delta_{1}(h/2)$ 来抵消泰勒展开的高阶项，而该过程可以不断进行，从而不断改进精度。\n",
    "\n",
    "\n",
    "例如，利用不同步长的结果，抵消低阶误差，改进精度\n",
    "$$ \n",
    "\\Delta_{1}(h)-4\\Delta_{1}(h/2)=-3f^{\\prime}(x)+O\\left(h^{4}\\right)\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def Richason(f,x0,n,h):\n",
    "    \"\"\"理查森外推法\n",
    "\n",
    "    :f: TODO\n",
    "    :x0: TODO\n",
    "    :n: TODO\n",
    "    :h: TODO\n",
    "    :returns: TODO\n",
    "\n",
    "    \"\"\"\n",
    "    G = np.zeros(n)\n",
    "    for i in range(n):\n",
    "        y1 = f(x0+h/2**(i+1))\n",
    "        y2 = f(x0-h/2**(i+1))\n",
    "        G[i] = 2**(i)*(y1-y2)/h\n",
    "\n",
    "    G1=np.copy(G)\n",
    "\n",
    "    for i in range(n-1):\n",
    "        for j in range(i+1,n):\n",
    "            G1[j] = (G[j] - 0.5**(2*(i+1))*G[j-1]) \\\n",
    "                    / (1 - 0.5**(2*(i+1)))\n",
    "\n",
    "        G[:] = G1[:]\n",
    "\n",
    "    df = G[-1]\n",
    "    return df\n",
    "\n",
    "def f(x):\n",
    "    return 2**x\n",
    "print(\"y=2**x 在x=1处的导数为:%.15f, 精确值:%.15f\"%(Richason(f,1,8,0.1),2*np.log(2)))\n",
    "\n",
    "print(\"y=cos(x) 在x=pi/4处的导数为:%.15f, 精确值:%.15f\"%(Richason(np.cos,np.pi/4,8,2*np.pi/64),-np.sin(np.pi/4)))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "另一种思路：利用上一章介绍的函数近似来计算偏导数。如样条插值自动能给出各个点的导数（边界点由边界条件给出）。此外采用一些函数近似，如切比雪夫近似等，同样可以方便给出导数值。\n",
    "\n",
    "假设我们有\n",
    "$$\n",
    "f(x)\\approx\\sum_{k=0}^{N}c_{k}T_{k}(x)\n",
    "$$\n",
    "我们同样可以得到$f^{\\prime}(x)$的Chebyshev 展开式，\n",
    "$$\n",
    "f^{\\prime}(x)\\approx\\sum_{k=0}^{N}c_{k}^{\\prime}T_{k}(x)\n",
    "$$\n",
    "这里的系数$c_{k}^{\\prime}$与原先的系数之间的关系为\n",
    "$$\n",
    "\\begin{aligned}c_{N}^{\\prime} & =c_{N-1}^{\\prime}=0\\\\\n",
    "c_{k-1}^{\\prime} & =c_{k+1}^{\\prime}+2kc_{k},\\quad(k=N-1,N-2,\\cdots,1)\n",
    "\\end{aligned}\n",
    "$$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### 微分方程中插值的应用\n",
    "\n",
    "如果将我们希望得到的常微分方程的解看做关于步长$h$的一个函数，这个函数一般会存在一个关于$h$幂次的渐近展开式。可以在几个不同的步长来计算相同的微分方程，然后将解进行外推，外推到$h\\to0$得到的结果就是我们所希望的。这种方法由Bulirsch和\n",
    "Stoer首先倡导，因此又称为Bulirsch-Stoer 方法。\n",
    "\n",
    "一般来说，Bulirsch-Stoer 方法特别适用于方程的右边的函数都是十分光滑，并且我们对于解的精度有比较高的要求的时候。假定我们需要求解的初值问题由下式定义:\n",
    "$$\n",
    "\\dot{y}(t)=f(t,y),y\\left(t_{0}\\right)=y_{0}\n",
    "$$\n",
    "将方程从$t_{0}$积分到$\\bar{t}=t_{0}+H$，其中$H$是一个不一定很小的步长。一般会将整个的$H$分为$n$份，即$h=H/n$，其中$n>0$是一个正的自然数。\n",
    "按照下式定义一个函数值$S(\\bar{t},h)$:\n",
    "$$\n",
    "\\begin{aligned}\\eta_{0} & =y_{0}\\\\\n",
    "\\eta_{1} & =\\eta_{0}+hf\\left(t_{0},\\eta_{0}\\right),t_{1}=t_{0}+h\\\\\n",
    "\\eta_{j+1} & =\\eta_{j-1}+2hf\\left(t_{j},\\eta_{j}\\right),\\\\\n",
    "t_{j+1} & =t_{j}+h,,j=1,2,\\cdots,n-1\\\\\n",
    "S(\\bar{t};h) & =\\frac{1}{2}\\left[\\eta_{n}+\\eta_{n-1}+hf\\left(t_{n},\\eta_{n}\\right)\\right]\n",
    "\\end{aligned}\n",
    "$$\n",
    "取不同的$n_{j}$值，即不同的$h_{j}=H/n_{j}$进行积分。则相应的数值$S(\\bar{t};h_{j})$的内插k阶多项式记为$\\tilde{T}_{ik}(h)$\n",
    "$$\n",
    "\\tilde{T}_{ik}(h)=a_{0}+a_{1}h^{2}+\\cdots+a_{k}h^{2k}\n",
    "$$\n",
    "那么有\n",
    "$$\n",
    "\\tilde{T}_{ik}\\left(h_{j}\\right)=S\\left(\\bar{t};h_{j}\\right),j=i,i-1,\\cdots,i-k\n",
    "$$\n",
    "最终我们需要的是$h=0$的值，记\n",
    "$$\n",
    "T_{ik}=\\tilde{T}_{ik}(0)\n",
    "$$\n",
    "则有\n",
    "$$\n",
    "\\lim_{i\\to\\infty}T_{ik}=y(\\bar{t}),k=0,1,...\n",
    "$$\n",
    "事实上$T_{ik}$与严格的解$y(t)$之间的差别如下，\n",
    "\\begin{align*}\n",
    "T_{ik} & =y(\\bar{t})+(-1)^{k}h_{i}^{2}h_{i-1}^{2}\\cdots h_{i-k}^{2}\\\\\n",
    " & \\times\\left[\\tilde{u}_{k+1}(\\bar{t})+\\tilde{v}_{k+1}(\\bar{t})\\right]\n",
    "\\end{align*}\n",
    "这里$\\tilde{u}_{k+1}(\\bar{t})$和$\\tilde{v}_{k+1}(\\bar{t})$是两个特定的解析函数。\n",
    "如果引进外推积分法中Neville记号，将近似解记为$T_{k0}=S(\\bar{t};h_{k})$,可以得到类似的Neville三角形图\n",
    "$$\n",
    "\\begin{array}{c|cccc}\n",
    "S\\left(\\bar{t};h_{0}\\right) & T_{00}\\\\\n",
    " &  & T_{11}\\\\\n",
    "S\\left(\\bar{t};h_{1}\\right) & T_{10} &  & T_{22}\\\\\n",
    " &  & T_{21} &  & T_{33}\\\\\n",
    "S\\left(\\bar{t};h_{2}\\right) & T_{20} &  & T_{32} & \\vdots\\\\\n",
    " &  & T_{31} & \\vdots\\\\\n",
    "S\\left(\\bar{t};h_{3}\\right) & T_{30} & \\vdots\\\\\n",
    "\\vdots & \\vdots\n",
    "\\end{array}\n",
    "$$\n",
    "各个$T_{k,j}$由下列递推关系给出\n",
    "$$\n",
    "T_{k,j+1}=T_{kj}+\\frac{T_{kj}-T_{k-1,j}}{\\left(n_{k}/n_{k-j}\\right)^{2}-1}\\quad j=0,1,\\cdots,k-1\n",
    "$$\n",
    "\n",
    "![BSmethod](./pic/sec7-4.png)\n",
    "\n",
    "一般来说，对于一个常微分方程的初值问题我们经常采取的方法主要包括两类，一类是比较普适的Runge-Kutta或者其各类推广;另一类就是这里介绍的Bulirsch-Stoer方法。后者特别适用于对于解的精度要求极高并且方程的右边具有良好的解析行为的情形。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.3 迭代"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 2.3.1 一元方程的求解"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### 二分法\n",
    "\n",
    "\n",
    "如果函数在某个区域$[a,b]$内连续并且一定有根$\\xi\\in[a,b]$存在，例如$f(a)$与 $f(b)$异号，那么最为直接的求根方法就是对分法(二分法，Bisection method)。\n",
    "\n",
    "![sec4-1](pic/sec4-1.png)\n",
    "\n",
    "这个算法的的好处是，它虽然不一定是最快的，但是它是最安全的，几乎不会失败。如果求根过程本身并不耗费太多的时间，那么这个方法是值得推荐的。\n",
    "该方法的另一个好处是，只需要知道函数值，不需要计算导数值，对一些不易计算导数的情况特别有用。对分法还有一个好处就是它对于根的精度有绝对的控制。由于我们总是可以确信至少一个根存在于一个固定测度的线段之内，而这个线段的测度随着迭代的次数是指数减小的，因此所得到的根的精度是绝对有保障的。设迭代过程中尝试解$x_{i}$与真实解$\\xi$之间的差别为$\\epsilon_{i}\\equiv x_{i}-\\xi$，那么对于对分法有\n",
    "$$\n",
    "|x_{i+1}-\\xi|\\simeq|x_{i}-\\xi|/2\n",
    "$$\n",
    "这种收敛速度称为**线性收敛**。具体说，如果\n",
    "$$\n",
    "\\epsilon_{i+1}\\sim(\\epsilon_{i})^{m}\n",
    "$$\n",
    "就称该算法是**m幂次收敛**的。线性收敛对应于$m=1$的情形。\n",
    "注意误差$|\\epsilon_{i}|$的大小随着i的增加其实是指数趋向于0的。\n",
    "称之为线性收敛，在于达到所需精度正好线性依赖于迭代次数。\n",
    "因此对于线性收敛的算法，每提高一位精度，就意味着多消耗一定量的计算时间。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### Newton-Ralphson算法\n",
    "\n",
    "\n",
    "二分法比较稳定，但是速度稍微慢一些。更快收敛的可以用Newton-Ralphson算法。\n",
    "首先考虑一维的情形。设$f(x)=0$有一个根$\\xi$。\n",
    "假定$f$在所寻找的根$\\xi$附近的邻域内足够光滑。\n",
    "选择足够接近根$\\xi$的另一个点$x_{0}$作为我们的出发点，则有\n",
    "$$\n",
    "f(\\xi)=0=f\\left(x_{0}\\right)+f^{\\prime}\\left(x_{0}\\right)\\left(\\xi-x_{0}\\right)+\\cdots\n",
    "$$\n",
    "如果忽略后面的高阶项，这等价于在所寻找的根附近对函数$f$运用线性近似，可以得到\n",
    "$$\n",
    "\\xi\\simeq x_{0}-\\frac{f(x_{0})}{f^{\\prime}(x_{0})}\n",
    "$$\n",
    "这即为著名的Newton-Ralphson求根方法。\n",
    "\n",
    "![sec4-2](pic/sec4-5.png)\n",
    "\n",
    "可以证明，在真实根附近，每次迭代解与真实根的差别是**平方收敛**的，即\n",
    "$$\n",
    "\\epsilon_{i+1}=-(\\epsilon_{i}^{2})\\frac{f^{\\prime\\prime}(\\xi)}{2f^{\\prime}(\\xi)}\n",
    "$$\n",
    "在函数的根附近，对于固定迭代次数，如果牛顿法可以改进两位有效数字，那么对分法则只能改进一位。\n",
    "这个方法有一个潜在的弱点，那就是它可能会 失败。\n",
    "其中最为典型的例子是初始选择的邻域中恰好包含了函数的极值点。\n",
    "由于在极值点附近函数的导数为零，因此迭代中每一步的修正$|\\Delta x_{i}|$非常大。在迭代中一旦某一步出现了这 种情况，后续的迭代能够使得它再回到正轨的可能性很小。从而整个迭代因此可能会失败。\n",
    "从这点来说，它远不如对分法稳定。初始值的选取会影响其收敛，甚至不收敛。\n",
    "\n",
    "![sec4-6](pic/sec4-6.png)\n",
    "![sec4-7](pic/sec4-7.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### 割线法\n",
    "\n",
    "牛顿法虽然收敛很快，但是每次迭代中需要计算一次导数，如果导数的计算非常耗时或者并不知道，则可以考虑使用**割线法**(secant method)。\n",
    "割线法采用两次函数值来近似其导数值：\n",
    "$$\n",
    "f^{\\prime}(x_{i})\\simeq\\frac{f(x_{i})-f(x_{i-1})}{x_{i}-x_{i-1}},\\ i=1,2,...\n",
    "$$\n",
    "则牛顿法的迭代可以化为\n",
    "$$\n",
    "x_{i+1}=x_{i}-\\frac{\\left(x_{i}-x_{i-1}\\right)f\\left(x_{i}\\right)}{f\\left(x_{i}\\right)-f\\left(x_{i-1}\\right)},i=1,2,\\cdots\n",
    "$$\n",
    "注意割线法的启动需要两个起始点。其计算量平均每次迭代需要计算一次函数值。割线法的收敛性与牛顿法类似，其缺点是有可能不收敛，特别是初始点之间恰好包含函数$f(x)$的一个极值，割线法很可能会失败。可以采用**试位法**(regula falsi method)来克服这个缺点，其精神是将割线法与对分法相结合,即通过符号来选定保留上一步的哪个点。\n",
    "\n",
    "![sec4-2](pic/sec4-2.png)\n",
    "![sec4-3](pic/sec4-3.png)\n",
    "\n",
    "如果割线法收敛，则其收敛速度与牛顿法类似。\n",
    "$$\n",
    "\\epsilon_{i+1}\\simeq\\frac{f^{\\prime\\prime}(\\xi)}{2f^{\\prime}(\\xi)}\\epsilon_{i}\\epsilon_{i-1}\n",
    "$$\n",
    "与牛顿法相比($\\epsilon_{i+1}\\sim\\epsilon_{i}^{2}$)，该算法的收敛速度会更慢一些。\n",
    "对上式取对数，可以得到\n",
    "$$\n",
    "\\epsilon_{i+1}\\simeq C\\left(\\epsilon_{i}\\right)^{F},F=\\frac{1+\\sqrt{5}}{2}\\approx1.6180\\cdots\n",
    "$$\n",
    "因此割线法的收敛速度介于对分法和牛顿法之间。\n",
    "割线法和牛顿法在一些情形下收敛会变慢。\n",
    "\n",
    "![sec4-4](pic/sec4-4.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 2.3.2 多元方程的求解\n",
    "\n",
    "如果函数是多维的，那么方程$f(x)=0$实际上等价于$n$个联立的非线性方程：\n",
    "$$\n",
    "\\left\\{ \\begin{array}{c}\n",
    "f_{1}(x)\\equiv f_{1}\\left(x^{1},x^{2},\\cdots,x^{n}\\right)=0\\\\\n",
    "\\vdots\\\\\n",
    "f_{n}(x)\\equiv f_{n}\\left(x^{1},x^{2},\\cdots,x^{n}\\right)=0\n",
    "\\end{array}\\right.\n",
    "$$\n",
    "完全类似于一维时的公式，这时有\n",
    "$$\n",
    "f(\\xi)=0=f\\left(x_{0}\\right)+Df\\left(x_{0}\\right)\\cdot\\left(\\xi-x_{0}\\right)+\\cdots\n",
    "$$\n",
    "这里$Df(x)$表示函数的Jacobi矩阵:\n",
    "$$\n",
    "[Df(x)]_{ij}=\\frac{\\partial f_{i}(x)}{\\partial x^{j}}\n",
    "$$\n",
    "假定函数的Jacobi矩阵在$\\xi$附近不奇异，则可以得到n维的Newton-Ralphson算法\n",
    "$$\n",
    "x_{i+1}=x_{i}-\\left[Df\\left(x_{i}\\right)\\right]^{-1}\\cdot f\\left(x_{i}\\right),\\quad i=0,1,2,\\cdots\n",
    "$$\n",
    "停止迭代的条件一般要求$\\Delta x_{i}$在n维空间的模$||\\Delta x_{i}||$足够小。\n",
    "例：用牛顿迭代法求解下列方程组，求出迭代一次的根 $x_1,y_1$:\n",
    "$$\n",
    "\\begin{cases}\n",
    "x^2 -10x +y^2 +4 =0 \\\\\n",
    "xy^2 +x -10y +4=0\n",
    "\\end{cases}\n",
    "$$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "      converged: True\n",
      "           flag: 'converged'\n",
      " function_calls: 10\n",
      "     iterations: 9\n",
      "           root: 1.69460092050353\n",
      "11 1.6946009205035544\n",
      "14 1.6946009205035546\n",
      "    fjac: array([[ 0.89914291, -0.43765515],\n",
      "       [ 0.43765515,  0.89914291]])\n",
      "     fun: array([-1.11022302e-16,  0.00000000e+00])\n",
      " message: 'The solution converged.'\n",
      "    nfev: 10\n",
      "    njev: 1\n",
      "     qtf: array([-1.19565972e-11,  4.12770392e-12])\n",
      "       r: array([ 2.16690469, -1.03701789,  1.10605417])\n",
      "  status: 1\n",
      " success: True\n",
      "       x: array([0.8411639, 0.1588361])\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from scipy.optimize import root_scalar,root\n",
    "\n",
    "def f(x):\n",
    "    return np.log(x)*np.exp(x) - x**2\n",
    "\n",
    "def fprime(x):\n",
    "    return 1/x*np.exp(x)+np.log(x)*np.exp(x)-2*x\n",
    "\n",
    "sol = root_scalar(f,bracket=(1,2))\n",
    "print(sol)\n",
    "\n",
    "sol = root_scalar(f,x0=1,x1=1.1)\n",
    "print(sol.function_calls,sol.root)\n",
    "\n",
    "sol = root_scalar(f,x0=1,fprime=fprime)\n",
    "print(sol.function_calls,sol.root)\n",
    "\n",
    "\n",
    "def fun(x):\n",
    "    return [x[0]  + 0.5 * (x[0] - x[1])**3 - 1.0,\n",
    "            0.5 * (x[1] - x[0])**3 + x[1]]\n",
    "def jac(x):\n",
    "    return np.array([[1 + 1.5 * (x[0] - x[1])**2,\n",
    "                      -1.5 * (x[0] - x[1])**2],\n",
    "                     [-1.5 * (x[1] - x[0])**2,\n",
    "                      1 + 1.5 * (x[1] - x[0])**2]])\n",
    "\n",
    "sol = root(fun, [0, 0], jac=jac)\n",
    "print(sol)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 2.3.3 函数求极值\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### 一维函数求极值\n",
    "\n",
    "\n",
    "一维函数求极值的问题与求根的方法类似，不断缩小搜寻的范围，最后获取近似的极小值。\n",
    "\n",
    "假设我们并不知道函数的导数（如果知道，问题就转化为求其导数的零点问题了）， 仅仅能够计算其函数值。我们预估该函数在某个区域内具有极值。\n",
    "此我们在该区域内选择三个点：$x_{0}<x_{1}<x_{3}$并计算$f(x_{0}),f(x_{1})$和$f(x_{3})$。\n",
    "这三个函数值必须呈现出所谓的 “中间小、两头大”的趋势: $f(x0)>f(x_1),f(x_3)>f(x_1)$。这时我们基本可以肯定$f(x)$在区间$(x_0,x_3)$之间存在一个极小值点，如果这个函数在该区间内没有什么奇异点话。\n",
    "\n",
    "对于一个一维的函数，首先大致确定极小值所在的区间实际上是蛮重要的一件事情，而且这对于一维函数一般是可以做到的。这个方法与前面讨论的对分法求根的思想其实非常接近。唯一的区别是，对分法的区间由两个坐标确定，而这里则是三个，因此在比较和更新 的时候稍微复杂一些罢了。\n",
    "假设函数在$[x_{0},x_{3}]$之间呈现出两边大，中间小的趋势，假设其中有一个极值点。从原先的三个点$(x_{0},x_{1},x_{3})$出发，我们希望寻找一个新的点$x_{2}$，这个点可能在原先 的中间点$x_{1}$的左侧，也可能在其右侧。\n",
    "然后我们可 以计算函数$f(x_{2})$。我们现在将$f(x_{2})$与原先的中间点$x_{1}$ 处的函数值$f(x_{1})$进行比较。\n",
    "  * 第一种情况：$f(x_{2})>f(x_{1})$，那么在$(x_{0},x_{1},x_{2})$满足中间小，两头大的性质，则用$(x_{0},x_{1},x_{2})$代替原来的区间。\n",
    "  * 第二种情况：$f(x_{2})<f(x_{1})$，那么在$(x_{1},x_{2},x_{3})$上满足中间小，两头大的性质，则用$(x_{1},x_{2},x_{3})$代替原来的区间。\n",
    "该步骤可以重复迭代进行。\n",
    "\n",
    "![sec4-13](pic/sec4-13.png)\n",
    "\n",
    "一个重要的问题是新的点$x_{2}$如何选择。\n",
    "我们假设区间$(x_{0},x_{1})$以及$(x_{1},x_{3})$的大小分别$a$和$c$，新的点$x_{2}$相对于$x_{1}$的坐标为$b$。注意,$b$可以大于零，也可以小于零。\n",
    "由于我们无法判断在新的点处的函数值$f(x_{2})$是会大于还是小于旧的中间点的函数值,我们的选择应当保持在这两种情形下，都能够得到有效的迭代算法。\n",
    "为此我们要求，在两种情形下，最后得到的新的区间的大小相等， 即：\n",
    "$$\n",
    "a+b=c,\\Rightarrow b=c-a.\n",
    "$$\n",
    "这意味着，如果$c>a$ 则$b>0$，反之如果$c<a$则$b<0$。因此，新的点一定位于原先两个区间$(x_{0},x_{1})$和$(x_{1},x_{3})$中较大的一个之中。\n",
    "要进一步确定最佳的$b$的数值我们需要再次利用迭代的理念。\n",
    "上述寻找步骤是需要计算机不断迭代的。因此，我们有理由要求一个好的迭代应当在利用同样的原则前提下可以在下一次中重复自己。这种尺度的“相似性”要求：\n",
    "$$\n",
    "\\frac{b}{c}=\\frac{a}{a+c}\n",
    "$$\n",
    "将上述两个方程联立，我们发现比例$\\lambda_{G}\\equiv c/(c+a)=a/c$满足：\n",
    "$$\n",
    "\\lambda_{G}^{2}+\\lambda_{G}-1=0,\\Rightarrow\\lambda_{G}=\\frac{-1+\\sqrt{5}}{2}\\approx0.6180339\\cdots\n",
    "$$\n",
    "这恰好是著名的**黄金分割**的比例。正因为如此，这种迭代又被称为**黄金分割迭代** ，或者**黄金分割搜寻**。\n",
    "另一个重要的问题是何时停止上述黄金分割迭代。\n",
    "这当然依赖于我们对待求解问题 的精度要求。为此我们假定区间已经足够小，以至于在函数的极小值点$\\bar{x}$附近我们可以利用泰勒展开：\n",
    "$$\n",
    "f(x)\\simeq f(\\bar{x})+\\frac{1}{2}f^{\\prime\\prime}(\\bar{x})(x-\\bar{x})^{2}\n",
    "$$\n",
    "当这两项在机器精度内相当时，显然可以停止迭代，即\n",
    "$$\n",
    "\\frac{|x-\\bar{x}|}{|\\bar{x}|}\\lesssim\\sqrt{\\epsilon}\\cdot\\sqrt{\\frac{2|f(\\bar{x})|}{\\bar{x}^{2}f^{\\prime\\prime}(\\bar{x})}}\n",
    "$$\n",
    "需要注意的是上式中与机器精度有关的因子$\\sqrt{\\epsilon}$，后面的那个因子对于通常的函数来说大概数量级为 1。我们知道对于单精度来说$\\epsilon\\sim10^{-7}$而对于双精度来说\n",
    "$\\epsilon\\sim10^{-16}$。这意味着$\\sqrt{\\epsilon}$分别大约是$10^{-4}$（单精度）和$10^{-8}$（双精度）。超过机器精度的进一步的迭代显然是没有任何意义的。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### 多维函数求极值\n",
    "\n",
    "接下来考虑多维函数的极值问题，同样可以分为两类。\n",
    "一类无需函数导数信息的方法--单纯形法。\n",
    "另一类需要函数导数信息的方法。如共轭梯度法，我们主要介绍这一类。\n",
    "如果我们能够获得函数的导数的信息，那么我们可以更好地寻找其极小值。\n",
    "\n",
    "设函数$f\\in C^{2}(\\mathbb{R}^{n})$，则它在点$x\\in\\mathbb{R}^{n}$处的**梯度**记为：\n",
    "$$\n",
    "g(x)\\equiv Df(x)=\\left(\\frac{\\partial f}{\\partial x^{1}},\\cdots,\\frac{\\partial f}{\\partial x^{n}}\\right)^{T}\n",
    "$$\n",
    "函数沿某个方向s的导数则记为，\n",
    "$$\n",
    "\\frac{\\partial f}{\\partial s}(x)=\\lim_{\\alpha\\rightarrow0}\\frac{f(x+\\alpha s)-f(x)}{\\alpha}=[Df(x)]^{T}\\cdot s\n",
    "$$\n",
    "类似的，我们将函数的二阶导数，即所谓的**Hessian矩阵**，记为$H(x)$\n",
    "$$\n",
    "H(x)_{ij}=\\frac{\\partial^{2}f(x)}{\\partial x^{i}\\partial x^{j}}\n",
    "$$\n",
    "在所有的下降方法中，依赖于我们对函数各阶导数了解情况，可以采取不同的迭代方法。下面将着重讨论的例子是著名的**共轭梯度法**。\n",
    "这个方法假设我们了解函 数的一阶导数值。如果同时还可以获得函数更高阶的导数值，还存在收敛更快 (迭代次数更少) 的算法，不过在每一次迭代中需要的计算量也相应更大一些。\n",
    "与求根问题不同的是，求极小值除了最初的出发点$x_{0}\\in\\mathbb{R}^{n}$之外，还需要有一个所谓的**搜寻方向**，$s_{i}\\in\\mathbb{R}^{n}$。\n",
    "它的迭代方法一般为\n",
    "$$\n",
    "x_{i+1}=x_{i}+\\lambda_{i}s_{i}\n",
    "$$\n",
    "其中$s_{i}$为搜寻方向。\n",
    "一旦搜寻方向确定，我们可以令\n",
    "$$\n",
    "\\phi_{i}(\\lambda):=f\\left(x_{i}-\\lambda s_{i}\\right)\n",
    "$$\n",
    "并对$\\lambda$取极小值 (也就是在$s_{i}$的方向上寻找一个一维函数的极小值):$f(x_{i+1})\\simeq\\min_{\\lambda}\\phi_{i}(\\lambda)$。\n",
    "不同的算法会选择不同的搜寻方向$s_{i}$，但是一般来说，我们总是要求在$\\lambda=0$的地方，$s_{i}$与函数的下降方向的夹角是锐角：\n",
    "$$\n",
    "\\phi_{i}^{\\prime}(0)=-g^{T}\\left(x_{i}\\right)s_{i}<0\n",
    "$$\n",
    "其中$g(x)$是函数$f(x)$在$x$处的梯度：\n",
    "$$\n",
    "g^{T}(x)\\equiv Df(x)=\\left(\\frac{\\partial f}{\\partial x^{1}},\\cdots,\\frac{\\partial f}{\\partial x^{n}}\\right)\n",
    "$$\n",
    "一个最初的想法是，我们每次都沿着函数的负梯度的方向走一小步难道不是最安全合理 的吗？答案是，并非如此！\n",
    "永远严格沿着函数的负梯度方向搜索被称为**最陡下降法**。这个方法实际上在数值上并不有效，因此其实已经不用了。\n",
    "\n",
    "![sec4-12](pic/sec4-12.png \"最陡下降会比较低效\")\n",
    "\n",
    "另外一种方法是首先随机地选择一个方向$s$。现在我们首先沿着这个方向将函数极小化。我们到达一个极小值点$\\xi$。按照定义，在这点函数的梯度一定没有沿着$s$分量，即\n",
    "$$\n",
    "s^{T}Df(\\xi)=0.\n",
    "$$\n",
    "下一步我们再寻找另外一个方向 $t$,如果不希望破坏我们在$s$方向已经取得的成果，我们必须保证函数的梯度与$s$垂直。\n",
    "假定初始点距离极小值点不太远。我们将坐标的原点选择在初始点上。那么在原点附近函数$f(x)$的 Taylor 展开为：\n",
    "$$\n",
    "f(x)=f(0)-b^{T}x+\\frac{1}{2}x^{T}Ax+\\cdots\n",
    "$$\n",
    "$b=-Df(0)$是函数在原点的负梯度，$A$是函数在原点的 Hessian 矩阵。\n",
    "不失一般性， 我们将假定$f(0)=0$。在原点附近的任意一个点$x$处的梯度为：\n",
    "$$\n",
    "Df(x)=Ax-b\n",
    "$$\n",
    "需要注意的是，在我们迭代搜寻的过程中，函数的梯度是不断改变的。\n",
    "显然，由于$b$是一 个常矢量，因此迭代过程中的改变为：\n",
    "$$\n",
    "\\delta(Df(x))=A(\\delta x)\n",
    "$$\n",
    "下面需要在一个新的方向$t$上进行搜寻。不希望沿着新的方向的搜寻“破坏”我们 之前沿着$s$方向搜寻已经达成的成果。因此我们必定要求搜寻过程中函数梯度的改变仍然与旧的方向垂直。即要求：\n",
    "$$\n",
    "0=s^{T}\\delta(Df(x))\\Rightarrow s^{T}At=0.\n",
    "$$\n",
    "也就是说，并不是新方向与旧方向垂直，而是在$A$的作用下垂直。这样的方向$t$就称为原先方向的**共轭方向**。\n",
    "共轭梯度算法就是一个建立在共轭方向上的一种下降方法。\n",
    "它的主要方法是假定函数在极值点附近具有标准的二次形式。由于要是极小值点，因此 Hessian 矩阵$A$必定是对称正定的实矩阵。\n",
    "无论是最陡下降法还是共轭梯度法实际上都可以看成是在一个子空间中寻找一个二 次函数的极小值的问题。这个二次函数就是\n",
    "$$\n",
    "\\Phi(x)=-b^{T}x+\\frac{1}{2}x^{T}Ax\n",
    "$$\n",
    "其中的 A 是一个正定对称实矩阵。\n",
    "如果我们忽略优化的函数$f(x)$高于二阶的 展开，这就是我们希望优化的目标函数。\n",
    "我们已经知道这个函数的梯度$Df=D\\Phi=Ax-b\\equiv-r$。最陡下降方法对应于在迭代的第$k$步，沿着$r_{k}$进行优化：\n",
    "$$\n",
    "x_{k+1}:\\min_{\\lambda}\\Phi\\left(x_{k}+\\lambda r_{k}\\right),\\quad r_{k}=b-Ax_{k}\n",
    "$$\n",
    "这相当于在$r_k$的方向实行一个一维的优化。\n",
    "共轭梯度法则是引入了另外一个搜寻方向$p_{k}$,它一般不同于$r_{k}$。经过迭代，一系列的$p_{k}$实际上与一系列的$r_{k}$张成了同样的子空间。这个子空间可以看成是下列的一系列\n",
    "矢量所张成: \n",
    "$$\n",
    "\\mathcal{K}_{k+1}(A;r_{0})=span\\{r_{0},Ar_{0},...,A^{k}r_{0}\\}\n",
    "$$\n",
    "这称为矢量$r_{0}$和矩阵A所生成的$k+1$维Krylov子空间。这个子空间等价于由各个$r_{k}$所构成的子空间。\n",
    "因此在迭代的第 k 步，我们实际上是在 Krylov 子 空间中进行优化:\n",
    "\\begin{align*}\n",
    "x_{k+1}:\\min_{\\lambda_{0},...,\\lambda_{k}} & f(x_{k}+\\lambda_{0}r_{0}+...+\\lambda_{k}r_{k})\\\\\n",
    "r_{j}=b-Ax_{j} & ,j=0,...,k\n",
    "\\end{align*}\n",
    "由于各个$r_{j}$是线性无关的，而一个n维空间最多由n个线性无关的向量，因此，理论上共轭梯度法可以保证最多迭代n次一定可以收敛到严格解。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXkAAAD8CAYAAACSCdTiAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAnvElEQVR4nO3deXxc1X338c+RNBqNNFpGm7VbErbBNl4A4QAGQwIEwuqkJOC8ICwBt1lomqTlCaVL0qZ58qRtSp4naRuXEJIUYlJCHtJs7IQlbMJsXvCCLdtarH1fR5rTP+7IWix5kebOyKPv+/Wa172z3XM8oK+Ozj33N8Zai4iIxKeEWHdARETco5AXEYljCnkRkTimkBcRiWMKeRGROKaQFxGJY66HvDEm0RjzpjHmV263JSIiE0VjJP8FYEcU2hERkUlcDXljTAlwJXCfm+2IiMjUklw+/r3AXUD6dC8wxmwENgKkpaWdddppp7ncpYmGhkPsbOymJOAjkJo8+wO27AKTADmLZn8sEZHj8MYbb7RYa/Omes61kDfGXAU0WWvfMMZcNN3rrLWbgE0AVVVVtrq62q0uTam9d4gz/v5J7rlqGbedXzH7Az5yG9S9AV+I7r9DROYvY8z+6Z5zc7pmLXCNMaYG2Ax8yBjzny62NyPpKc7vua6BYGQOmLUQOg7CyHBkjiciMguuhby19m5rbYm1thy4AXjGWnujW+3NVFJiAn5vEp39EQr5QDnYEeiqi8zxRERmQevkgUyfh67+CI28AwudbXtNZI4nIjILbp94BcBa+xzwXDTamon0lAiP5AE6pp0iExGXBINBamtrGRgYiHVXXJGSkkJJSQkej+e43xOVkJ/rMn2eyM3JZ5SASdRIXiQGamtrSU9Pp7y8HGNMrLsTUdZaWltbqa2tpaLi+BeJaLoGyPB56IrUSD4xCTJLoF0jeZFoGxgYICcnJ+4CHsAYQ05Ozgn/laKQZ3ROPkIhD86UjUbyIjERjwE/aib/NoU8kJHiidycPDgnXzUnLyJzgEIeZyTfOzTC8EgoMgcMlENvMwz2ROZ4IiIzpJAHMnyjF0RFahllubPtOBCZ44nISeGiiy7i8ccfn/DYvffey2c/+1kaGhq46qqrpnxfc3Mzl19+uSt9UsjjjOSByM3LZ5U7W83Li8wrGzZsYPPmzRMe27x5Mxs2bODb3/42d9xxxxHvGR4eJi8vj8LCQl566aWI90lLKHHm5IHIr5VXyIvEzNf+exvb67siesxlRRn87dXLp33+uuuu46/+6q8YHBzE6/VSU1NDfX09559/PjfffDNf//rXAXjggQf49a9/zcDAAL29vTzzzDOsX7+eBx98kLVr10a0zxrJA5mp4ZF8pNbKp2ZDsl8nX0XmmZycHNasWcPvfvc7wBnFX3/99dTU1BAIBPB6vYdf+/LLL/OjH/2IZ555BoCqqipeeOGFiPdJI3lcGMkbo2WUIjF2tBG3m0anbK699lo2b97M/fffT0NDA3l5EysBX3rppWRnZx++n5+fT319fcT7o5E8Y3PyEV1GmbVQF0SJzEPr16/n6aefZsuWLfT393PmmWfi8/mOuIgpLS1twv2BgQF8Pl/E+6OQZ/yJ1wiWBw6UO9M11kbumCIy5/n9fi666CJuu+02NmzYAMCSJUuoqak56vt27drF6aefHvH+KOSBFE8CnkQT4QuiyiHY56yXF5F5ZcOGDbz99tvccMMNgDNqP+WUU9izZ8+073n22We58sorI94XhTzOpcIRLVIGKjksMo999KMfxVrL+K8z/fznP88DDzwAwC233MJ3v/vdCe/55S9/yY03Rv4rNxTyYZEvbVDubDUvLyI4wV9eXj7lc83NzXzpS18iEAhEvF2FfFhEK1ECZJU5W43kRSTs9ttvn/LxvLw81q9f70qbCvmwiIe8xwf+AuioidwxRUROkEI+zJmTj/CXbwfKNV0jIjGlkA/LiORXAI4KLNR0jYjElEI+bPSLQ2wk17XnLoHOgzAQ2foZIiLHSyEfluHzMByy9A2NRO6gBSucbeO2yB1TROas6UoNX3HFFVx00UWHH3vzzTenPQn77rvvcsstt0SsTwr5sMNXvUZyrfyC8NVrjVsjd0wRmbOmKzV89913T3jsG9/4BnfeeecR7x8eHmbFihXU1tZy4EBkvo/C1QJlxphS4MdAARACNllrv+NmmzM1vkhZYWaE6kdkFIEvAIfejczxROT4/fYrkf/ZK1gBH/nmtE9PV2q4vLz8cDGy7u5u3nnnHVatWgXAV7/6Verr66mpqSE3N5eHHnqIq6++ms2bN3PXXXfNustuj+SHgS9ba5cC5wCfM8Ysc7nNGXGlfo0xzmheI3mReWG6UsOlpaU8+uijAFRXVx9Ro+aNN97gscce46GHHgIiW3bY1ZG8tbYBaAjvdxtjdgDFwHY3252J0a8AjPgKm4IVUP1DCI1AQmJkjy0i0zvKiNtNU5UaHm+qssPXXHPNhAqUkSw7HLU5eWNMOXAG8OqkxzcaY6qNMdXNzbEr5uVKuWFwRvLD/dC2N7LHFZE5aapSw+NFu+xwVELeGOMHfg78mbV2wnpCa+0ma22VtbZq8m+3aAqkJQPQ1jsY2QMXhP8s07y8yLwwVanh8ZYuXXrUapQQ2bLDroe8McaDE/APWmsfdbu9mUr3JpGclEBLz1BkD5x3GiQkKeRF5pHJpYbHO+200+js7KS7u3va90ey7LDbq2sM8ANgh7X22262NVvGGPL8Xlq6IzyST/I6F0Xp5KvIvDFaang6t912Gw8//DC33347X/3qVyc8Nzg4SHV1Nffee29E+uL2SH4tcBPwIWPMW+HbFS63OWO56V6aeyIc8uDMyx9SyIuI4zOf+cyEL/Ue78CBA3zzm98kKSkyY3C3V9e8CBg324ikPH8yte39kT9wwQp492fQ1wap2cd+vYjMmLUWZxJh7kpJSeGmm26a8rnFixezePHiKZ+bSdkVXfE6Tq7fG/k5edDJV5EoSUlJobW1NbI1qOYIay2tra2kpKSc0PtcHcmfbPLSvbT1DjISsiQmRHAksGC0hs1WqLwwcscVkQlKSkqora0llsux3ZSSkkJJSckJvUchP06u30vIQnvfELn+qefLZsSfB/4FmpcXcZnH46GioiLW3ZhTNF0zzmiwN0d6hQ2EyxtoukZEokshP06u37kgqsWNFTYFp0PzThiJ8BW1IiJHoZAfJy/dGcm7EvILVsDIELTsivyxRUSmoZAfJ3c05LtdWGFTuNLZ1m2J/LFFRKahkB9ntLSBKxdE5S6BtDzY93zkjy0iMg2F/DiulTZwDg4V65yQj8M1vCIyNynkJ3GttAE4Id9zSPPyIhI1CvlJ8vzJ7lz1ClARvhBq7+/dOb6IyCQK+Uly/V531skDZFdAVhnsU8iLSHQo5CfJ9Y+VNnBFxTqoecH5OkAREZcp5CfJSx8rbeCKiotgoBMa3nbn+CIi4yjkJxktbeDKBVEAFRc4W03ZiEgUKOQnGS1t4Nq8fHqB85WAWi8vIlGgkJ8k183SBqMqLoT9L8Owi22IiKCQP0Kem6UNRlWsg+F+qH3dvTZERFDIH2G0tIGrI/ny88EkaMpGRFynkJ9ktLSBa3PyAL4sKDoDdj/hXhsiIijkp5TrT3avtMGo5R+D+jedGvMiIi5RyE8hL92lL/Qeb+UnwCTCWw+5246IzGuuh7wx5nJjzE5jzB5jzFfcbi8Scv1ed+fkAfz5sPhSeOdhXf0qIq5xNeSNMYnA94CPAMuADcaYZW62GQm5fi+tPS6WNhi1+pPQ3QDvP+tuOyIyb7k9kl8D7LHW7rXWDgGbgWtdbnPWcv3J7pY2GLXkckjJgrc1ZSMi7nA75IuBg+Pu14YfO8wYs9EYU22MqW5ubna5O8cnLz0FcPmCKIAkL6z4OOz4FfR3uNuWiMxLboe8meKxCXMg1tpN1toqa21VXl6ey905PqOlDVy9IGrU6k/CyCBs+4X7bYnIvJPk8vFrgdJx90uAepfbnLXR0gbNPQPuN1Z0BuQtdVbZVN3qfnsiJytrYSQII0PhW3g/FAzvj94fdvbHPz66P+G54YmPj94m3w8Nh187egs6iyUmvGaq+5Mes6Ejn7fjXrP8o/BH90X8Y3M75F8HFhtjKoA64Abgky63OWuHK1FGYyRvDKzeAE/+DRx6FwpWuN+myPEaCUKw36mzNBzeHr4/MG474ATs8AAMD409NzIYfk14fyQY3h8a2x7eHw3wwWnCfDgK/2ADiR5I8EBCIiQkhe8nHXlLDG9NovOaRA94fM79hKTw+xMnHsskjB3PJI69xiRCwemu/ItcDXlr7bAx5vPA40AicL+1dpubbUZCRkoUShuMd8ZN8MI/w1NfgxsfiU6bcvIbGYZgLwyN3npgqA+Cfc79w9v+Sfvh+8F+J7gP3w+HdbB/bGtnubzXJDrnnpK8kJgMiV5IGr8N31LTxvYTPWPPJ3gmvi4hadzrkiY97hl7f4Jn3DZp3P2kSc+PD3EPJMTfpUNuj+Sx1v4G+I3b7UTS4dIG0Qr51Gy44M/hyb92vv+18sLotCvRFwo5YTzYBQNdzhfIDHY79we7wvvdMNgz9vhQj3N/aPQWDvXhE5xOTEpxbslpzogzyedsPT7wZYMnJfzYVNvxN2/4/d6x+0kpTsCOfyzR6wSsxJT+C0wj15/sbv2aydZshNc2OdM2dzwblyOKuBLsh75W6GuD/vapbwMdzqqpgc6x22CXMzd7VAa86ZDsd7Zev7Pvzw8/5gdPavg1ac5+ctrYzZMGyaljj3tSnVBOSIzCByNzjUJ+GnnpXmrb+6PXoCcFPvTX8IuNsO1RWHFd9NoWJ7R7mqC3eWzb2wy9LdDX4gR6b4sT6n2tzjTHdBK9ThE6XwBSMiG90PmiGF+Wc9+b4WxTMsb2venO/mhwm6kWpomcOIX8NIqzfLy6tw1rLSZaP3ArPg4v/z94+muw9GrnT16ZnaE+56rirnpn290A3Y3OtqcJeg4528Guqd+fnO5Mp6XlOmG94HTnfmqOs/Vlh7eBsZvHF91/o8hRKOSnUZqdSvfgMB19QQJpydFpNCEBLv07+MlH4eXvwQVfik67J6vQCHQfgo4D0FkLnaPbOuiqc/YHOo58nyfV+RrG9EJnNZN/gTMVkpYf3uY529Rc5y8skZOYQn4aJYFUAA6290Uv5AFO+RAsvQae+ToUnwmVF0Wv7blosBva9kH7vvC2xtnvOAAdB501y+P5ApBZApmlUHYOZBRBehFkFDrb9AJnSkTTITJPKOSnUZrt/Ml9sK2flSVZ0W18/b/CfZfCz26Gjc9CdmV024+2kWEnuFt2QctuaN3j3Nr2Qk/jxNf6siFQDoWrnV+GgYWQWQZZpZBR7JyUFJHDFPLTKM0eG8lHnTcdNvwU/uOD8NMN8OknnZN0J7uRoBPize85t6YdTrC3vj9xRJ6WBzmLnFLM2ac4v+SyK5xwT8mMWfdFTkYK+WlkpHjISvVwsC0GIQ9OqH38R878/M8/DZ/48clzQs9aZwR+aCs0vguN26BxuxPoo2FuEiBQAXmnOtU4806F3CVOuPuyYtp9kXiikD+K0kAqB6O5jHKyygvhyn+CX30RfnApXP+fzmh2LgmFnGmVhrecsgyH3nG2veMqimaUwIJlzsg8fxnkL4XcxSfPLy2Rk5hC/ihKs32819Ad205U3ebMNT96B3z/QqeA0eJLY9OX0IgzGm94G+rfcraH3nGuwgTnsvD802Dxh6FgpVOLY8Fy52SoiMSEQv4oSgOpPLW9iVDIkpAQw9UYSy6Djc/Bw5+CBz8OK6+HtV9wRsduGR505s0b3oaGd5xt41anxgk4l7sXnA6rNkDhKihc6VTTTIriSiQROSaF/FGUZKcyNBKiqXuQgswYr5fOroRPPwHP/gNU3w/vbIYlH4E1t0PZuc5VkjMRCkFXLTS9B03bnZOhjVudgB+t+pec7oT4Wbc4q1oKVznTLbpMXmTOU8gfRWkgvIyyvS/2IQ9OPZLL/gEu+LJT5+bV78Ou3zoV9IrOhIXnOuvDRy/mSfSO1cseHghfrt/kbNv3O3Pp7fsmFroavapz8YedC4UKVjq/YFRLR+SkpJA/isPLKNv6OLs8O8a9GSc1Gy76Cpz3p7D/Jah5Efb/wblK9nhqbnvSIKvMCe9FF0POKc4J0bxTNX8uEmcU8kdRnDV2QdSclJzqnIQdPRE7Mgz9bWMj9pHgWL3spBSn/kpavi4YEplHFPJHkeJJZEGGNzYXRM1EYpIzTePPj3VPRGSOUMgfQ2kgNXYXRInISW8gOEJnf5COviAdfUN09Afp7A/S2Rfe9gfp6A+yqiST2y+IfAkThfwxlGan8tq+tlh3Q0RibCRk6ewP0t43RHvvEO19zn5Hn7Pf0TdEx+HHwqHeP8RAcPoviUkwkOnzkOnzUOjS4g6F/DGUBnw89lY/wZEQnkStMBGJF/1DI7T0DNLWO0Rb3xBtPUMT98NhPrrt6A9i7dTHSkowZKUmE0h1yqGUZqeyotjZz0pNdra+ZDJ9zmOZPg+ZqR78yUmuX4OjkD+GkuxUQhbqO/pZmDPDtegi4rqRkKWtd4iWnkFae5ytcxuitWeQ1l5n2xIO8/7g1F9S7kk0BFKTCaQmk52WzNLCDLLDAR5Icx4bDfRAOMD93qTofbnQCVLIH0PZ4WWUCnmRaLPW0tU/TFP3AE3dgzSP3nqcbcu4bVvvEKEpRtqeRENOmpccfzI5fi+VeX5y0pLJ9ic72zQv2WnJ5PqTCaQlkz6HA3smFPLHENOSwyJxylpL18AwjV0D4dsgjV0DNHU5Yd7YNRbqg8NHzmknJyWQ5/eSl+6lJJDKGWUB8vzJ5KZ7yfV7yUkb289Iia/QPlGuhbwx5h+Bq4Eh4H3gVmtth1vtuaUgIwVPouGAVtiIHJdQyNLSM0hD5wANnQMc6uznUNdgeDvAoU4n1KeaLslISSI/I4X8dC9VCwOH9/PCN2c/Zd4H94lwcyT/JHC3tXbYGPN/gLuB/+Vie65ITDAUZfm0jFIkrGsgSH1HP/Ud/dR1DBzeb+gYoL6zn8auAYIjE+dNPImGBRkpFGSksLw4k4uXOvsLMp1tfrqXBRkp+JJVDynSXAt5a+0T4+6+AlznVltui3ldeZEosdbS0Rektr2f2va+Cdu6jn7q2vvpHpxYOmM0wIuyfFQtDFCY5aMwHN5FWT4KMlPITk2ObSXXeSxac/K3AQ9Hqa2IK8328cS2xmO/UOQkMBAcoba9jwNtfRxo7eNgez8H2vo42OaEec+kEE/3JlEc8FES8PGBimyKAz6Ks1IpynJCPM/vVYDPYbMKeWPMU0DBFE/dY619LPyae4Bh4MFpjrER2AhQVlY2m+64piSQSmvvEL2Dw6R5da5a5r7ewWFqWnvZ39rnbFv62N/m3D/UNTBhvXeKJ4Gy7FRKA6mcU5lDScBHSSCV0mxnm+nzxO4fIrM2q8Sy1l5ytOeNMTcDVwEXWzv1ZQTW2k3AJoCqqqppLjWIrdEVNrXt/ZxakB7j3og4giMh9rf2sbe5h30tvdS09rK3uZd9Lb00dQ9OeG2u30t5TirnnpLDwuw0ynJ8lGWnUpadRq4/WScx45ibq2suxznReqG19qQ+a1mZ66yP39PUo5CXqOseCLKnqYc9TT2839zLnqYe9jb3cKCtj+FxC8Nz0pKpyE1j3ZI8KnLTKM9Jozw3lYU5afj1F+i85eZ/+e8CXuDJ8CjhFWvtn7jYnmsWL/CTlGDY3tDJlSsLY90diVNdA0F2N3azq7GHXY3d7GnqYXdjD4e6xr7UxZNoqMhNY8mCdD6yooDKXD+VeWlU5vrJTNW0ihzJzdU1i9w6drR5kxJZlO9ne31XrLsicWBoOMTelh7ea+hmx6Eudh3qZuehbuo7x8Lc53H+nztvUQ6L8v0szk/nlLw0yrJTSVINJTkB+hvuOC0rzOCl91ti3Q05yXT0DbG9vovtDc5tR0M3e5q6D68jT05MoDIvjTUV2SwpSOfUBeksWZBOcZZPK1YkIhTyx2lZUQaPvllHa88gOX5vrLsjc1Bz9yBb6zp5t66TrXWdbKvvoq5j7PqK/HQvSwszuHBJHksL01lamEFFbpqqm4qrFPLHaVlhBgA7Gro5f7FCfr7r7Avydm0H79Z18vZBZ9swbrqlMjeNMxcGuPGchSwvymBZUQa5GhxIDCjkj9PScMhvb+jk/MW5Me6NRFNwJMR7Dd28ebCdNw908PbBDva29B5+vjLXmW5ZUZzJiuJMlhVlkJ6ik6AyNyjkj1MgLZnCzBSdfJ0HOvqGeGN/O9X723ljfzvv1HYc/nafXL+XM8qy+KOzSlhdmsXpxZm6WEjmNIX8CVhWmMH2BoV8vKnv6Oe1fW28VtPG6/va2N3UAzjf9rO8KIMNa8o4syzAGWVZFGf5dOGQnFQU8idgWVEGz+1qZiA4QopH1fJOVrXtfbz8fiuv7mvj1X2tHGxzTo6me5M4qzzA+jOKOWthgFUlWaqKKCc9hfwJWFaYwUjIsruxhxUlmbHujhynlp5BXtrTwh/2tPLy3tbD3w0QSPWwpiKbW8+r4AOV2ZxWkEGili1KnFHIn4BlRWMnXxXyc9dAcITqmnae393MC7tb2BGeYstISeIDlTncuracc0/JYUl+utaiS9xTyJ+A0kAqacmJOvk6B+1v7eW5nc08t7OJl/e2MhAM4Uk0nLUwwF9cdiprF+WyojhTI3WZdxTyJyAhwbBUJ1/nhOBIiNdr2nh6RxPPvtd0eEljRW4aN5xdxroluZxTmUNqsv4Xl/lNPwEnaFlRBo9uqSMUsvpTP8p6Bof5/c5mnth+iGffa6JrYJjkxAQ+UJnNTecu5IOn5lMerhgqIg6F/AlaVpjBjwf3U9veT1lOaqy7E/fae4d4cnsjv9t2iBf3tDA0HCI7LZkPLy/gkqX5nL84T2V0RY5CPx0naPzJV4W8O9p6h/jd1kP8dmsDf3i/lZGQpSTg46ZzFnLZ8gLOWhjQ3LrIcVLIn6AlC9JJMLC9vovLT1dt+UjpHgjyxLZG/vudel7c3cJwyFKek8ofr6vkihWFLC/K0EVIIjOgkD9BKZ5ElixIZ8uBjlh35aQ3NBzi+V3N/OKtOp7a3sjgcIjiLB+3X1DJ1asKWVaoYBeZLYX8DKxdlMtPXtmvK19nwFrLtvouHnmjlsfeqqO9L0h2WjLXn13KtauLObMsS8EuEkEK+Rm4YHEuP3hxH6/ua+PCJXmx7s5JoaNviF+8WcfDrx/kvUPdJCcmcOmyBXzszGLWLclTTXURlyjkZ+ADFTkkJyXw/K5mhfxRWGt5dV8bP33tAL/deoih4RArijP5+2uXc/WqIrJSk2PdRZG4p5CfAV9yImvKs3lhd3OsuzIndfYH+cWWWh589QC7m3pIT0nihrNLuf7sUpYXqRyESDQp5Gdo3ZJcvvGb92jo7Kcw0xfr7swJuxu7eeAPNTy6pY7+4AirSrP41nUruXplkao5isSIQn6G1i3J4xu/eY8XdrXwibNLY92dmAmFLM/ubOL+l/bx0p5WkpMSWL+6iJvOKVcRN5E5wPWQN8b8OfCPQJ61tsXt9qLl1AXp5Kd7eX5387wM+YHgCI9uqeO+F/eyt7mXwswU/uKyU9mwpozsNM21i8wVroa8MaYUuBQ44GY7sWCM4YLFeTz9XiMjITtvrsDs7Avyk1dq+OFLNbT2DnF6cQbfuWE1V6wo1AoZkTnI7ZH8vwB3AY+53E5MrFuSy8+31PJuXSerS7Ni3R1XNXYNcN8Le3no1QP0Do3wwVPz2LjuFM6pzNa6dpE5zLWQN8ZcA9RZa9+O1xA4f1EuxsALu5rjNuTrOvr59+fe5+Hqg4yELFetLOSP151yuIaPiMxtswp5Y8xTQMEUT90D/CXw4eM4xkZgI0BZWdlsuhN1OX4vpxdl8vzuZu68eHGsuxNRte19fO/ZPfxXdS3GwHVnlfCZCxepKJvISWZWIW+tvWSqx40xK4AKYHQUXwJsMcassdYemnSMTcAmgKqqKjub/sTCBYtz+f7ze2nrHYqLE451Hf3hcD+IwfDJD5TxxxeeQnGWlomKnIxcma6x1r4L5I/eN8bUAFXxtLpm1LWri/nX597nZ9UH+ZMLT4l1d2asuXuQ7z27h4dePYDFcsPZZXz2g6foGgCRk5zWyc/SqQXpnFOZzU9e3s8dF1SedKtsOvuD/Mfze7n/pX0MDof4+Fkl3HnxYo3cReJEVELeWlsejXZi5eZzy/nMg1t4ekcjH14+1SmKuWcgOMJPXt7Pd5/dQ2d/kKtXFfHFSxZTmeePdddEJII0ko+AS5ctoDAzhR+/vH/Oh3woZPnFm3V8+8ld1HX0s25JHndddiqnF+vqVJF4pJCPgKTEBG48ZyH/+PhO9jR1syg/PdZdmtILu5v5xm/eY0dDFyuKM/nWdStZuyg31t0SERfpEsUIuf7sUpITE/jJy/tj3ZUj7DzUzc33v8ZNP3iN7oEg37lhNY99bq0CXmQe0Eg+QnL9Xq5aWcgjb9Ty55edSnqKJ9Zdoql7gG8/sYufVR/E703iniuW8qnzFuJNUkVIkflCIR9BnzqvnEffrOPBVw/EdDll39Aw972wj3///fsER0Lccl4Ff3rxIn1Jh8g8pJCPoNWlWVx8Wj7/8uQuLlm6gEX50V2pMhKy/HxLLf/8xE4auwa5fHkBX/nIaZTnpkW1HyIyd2hOPsL+98dW4EtO5Mv/9TbDI6GotGmt5bmdTVz5f1/grkfeoTDTxyN/ci7/ftNZCniReU4hH2H5GSl8ff3pvH2wg3977n3X23vrYAcb/uMVbvnh6/QODfPdT57BLz57HlXl2a63LSJzn6ZrXHDVyiKe2NbId57ezQdPy3dlDfqOhi7ufWoXj29rJCctma9ds5wNa8pITtLvbREZo5B3yd9du5xX9rZy50/f5IFbz2ZhTmSmTd471MV3ntrNb7ceIt2bxBcuXswd6yrxe/WfUkSOZKydO4Ufq6qqbHV1day7ETHVNW18+kfVGAPf++SZM16Xbq3l+d0t/ODFfTy/qxm/N4nb1pbz6fMryUyN/VJNEYktY8wb1tqqKZ9TyLtrf2svd/y4mvebe7nniqXcurb8uL9J6VDnAL96p56HXz/I7qYe8tK9fOqchdx07kIthxSRwxTyMdYzOMwXH36LJ7c3UhLwce3qItavLmbxgonlD7oGgmyv72JrXSdPbG/k9Zo2rIWVJZncfG45V60q1IVMInIEhfwcEApZfvl2PT/fUstLe1oIWcj0eUjxJJDiSWR4xFLX0X/49Yvy/VyzqoirVhaqMqSIHNXRQl5n66IkIcGw/oxi1p9RTFP3AL9+p4F9Lb0MBkMMDo9ggQ35pSwvymR5UQb5GSmx7rKIxAGFfAzkp6dw69qKWHdDROYBLaoWEYljCnkRkTimkBcRiWMKeRGROKaQFxGJYwp5EZE4ppAXEYljroa8MeZOY8xOY8w2Y8y33GxLRESO5NrFUMaYDwLXAiuttYPGmHy32hIRkam5OZL/DPBNa+0ggLW2ycW2RERkCm6G/BLgAmPMq8aY3xtjzp7qRcaYjcaYamNMdXNzs4vdERGZf2Y1XWOMeQoomOKpe8LHDgDnAGcDPzPGVNpJZS+ttZuATeBUoZxNf0REZKJZhby19pLpnjPGfAZ4NBzqrxljQkAuoOG6iEiUuDld8/+BDwEYY5YAyUCLi+2JiMgkbpYavh+43xizFRgCbp48VSMiIu5yLeSttUPAjW4dX0REjk1XvIqIxDGFvIhIHFPIi4jEMYW8iEgcU8iLiMQxhbyISBxTyIuIxDGFvIhIHFPIi4jEMYW8iEgcU8iLiMQxhbyISBxTyIuIxDGFvIhIHFPIi4jEMYW8iEgcU8iLiMQxhbyISBxTyIuIxDGFvIhIHFPIi4jEMYW8iEgccy3kjTGrjTGvGGPeMsZUG2PWuNWWiIhMzc2R/LeAr1lrVwN/E74vIiJR5GbIWyAjvJ8J1LvYloiITCHJxWP/GfC4MeafcH6ZnDfVi4wxG4GNAGVlZS52R0Rk/plVyBtjngIKpnjqHuBi4IvW2p8bYz4B/AC4ZPILrbWbgE0AVVVVdjb9ERGRiWYV8tbaI0J7lDHmx8AXwnf/C7hvNm2JiMiJc3NOvh64MLz/IWC3i22JiMgU3JyTvwP4jjEmCRggPO8uIiLR41rIW2tfBM5y6/giInJsuuJVRCSOKeRFROKYQl5EJI4p5EVE4phCXkQkjinkRUTimEJeRCSOKeRFROKYQl5EJI4p5EVE4phCXkQkjinkRUTimEJeRCSOKeRFROKYQl5EJI4p5EVE4phCXkQkjinkRUTimEJeRCSOKeRFROKYQl5EJI4p5EVE4tisQt4Y83FjzDZjTMgYUzXpubuNMXuMMTuNMZfNrpsiIjITSbN8/1bgY8D3xz9ojFkG3AAsB4qAp4wxS6y1I7NsT0RETsCsRvLW2h3W2p1TPHUtsNlaO2it3QfsAdbMpi0RETlxsx3JT6cYeGXc/drwY0cwxmwENobv9hhjpvqlcbLJBVpi3Yk5RJ/HkfSZTKTPY6IT/TwWTvfEMUPeGPMUUDDFU/dYax+b7m1TPGaneqG1dhOw6Vj9OJkYY6qttVXHfuX8oM/jSPpMJtLnMVEkP49jhry19pIZHLcWKB13vwSon8FxRERkFtxaQvlL4AZjjNcYUwEsBl5zqS0REZnGbJdQftQYUwucC/zaGPM4gLV2G/AzYDvwO+Bz82xlTVxNP0WAPo8j6TOZSJ/HRBH7PIy1U06Vi4hIHNAVryIicUwhLyISxxTyEWKMKTXGPGuM2REu9fCFWPdpLjDGJBpj3jTG/CrWfZkLjDFZxphHjDHvhf9fOTfWfYolY8wXwz8vW40xPzXGpMS6T9FmjLnfGNNkjNk67rFsY8yTxpjd4W1gpsdXyEfOMPBla+1S4Bzgc+HyDvPdF4Adse7EHPId4HfW2tOAVczjz8YYUwz8KVBlrT0dSMQphzLfPABcPumxrwBPW2sXA0+H78+IQj5CrLUN1tot4f1unB/eKa/ynS+MMSXAlcB9se7LXGCMyQDWAT8AsNYOWWs7Ytqp2EsCfMaYJCCVeXg9jbX2eaBt0sPXAj8K7/8IWD/T4yvkXWCMKQfOAF6NcVdi7V7gLiAU437MFZVAM/DD8BTWfcaYtFh3KlastXXAPwEHgAag01r7RGx7NWcssNY2gDOABPJneiCFfIQZY/zAz4E/s9Z2xbo/sWKMuQposta+Eeu+zCFJwJnAv1lrzwB6mcWf4Se78DzztUAFTrXaNGPMjbHtVfxRyEeQMcaDE/APWmsfjXV/YmwtcI0xpgbYDHzIGPOfse1SzNUCtdba0b/wHsEJ/fnqEmCftbbZWhsEHgXOi3Gf5opGY0whQHjbNNMDKeQjxBhjcOZad1hrvx3r/sSatfZua22JtbYc52TaM9baeT1Ks9YeAg4aY04NP3QxzlXh89UB4BxjTGr45+di5vGJ6El+Cdwc3r8ZmK4Y5DG5VWp4PloL3AS8a4x5K/zYX1prfxO7LskcdCfwoDEmGdgL3Brj/sSMtfZVY8wjwBac1WlvMg/LGxhjfgpcBOSGy8T8LfBN4GfGmE/j/DL8+IyPr7IGIiLxS9M1IiJxTCEvIhLHFPIiInFMIS8iEscU8iIicUwhLyISxxTyIiJx7H8AGs67oo+p+zgAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "      converged: True\n",
      "           flag: 'converged'\n",
      " function_calls: 13\n",
      "     iterations: 12\n",
      "           root: 2.360538484157754\n",
      "     fun: -5.247489118540432\n",
      "    nfev: 19\n",
      "     nit: 15\n",
      " success: True\n",
      "       x: 2.360538475992521\n",
      "------------------------------------------------------------------------------------------\n",
      "     fun: 1.2959168265020737e-15\n",
      "     jac: array([ 4.47034836e-08, -8.43907344e-08])\n",
      " message: 'Optimization terminated successfully.'\n",
      "    nfev: 9\n",
      "     nit: 1\n",
      "    njev: 3\n",
      "  status: 0\n",
      " success: True\n",
      "       x: array([1.        , 2.99999998])\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from scipy.optimize import minimize_scalar,minimize,root_scalar\n",
    "\n",
    "e2 = 14.4\n",
    "V0=1090\n",
    "r0=0.33\n",
    "def f(r):\n",
    "    return - e2/r + V0 * np.exp(-r/r0)\n",
    "def df(r):\n",
    "    return - e2/r**2 + V0/r0 * np.exp(-r/r0)\n",
    "\n",
    "\n",
    "r_plot=np.arange(1,10,0.1)\n",
    "plt.ylim((-10,4))\n",
    "plt.plot(r_plot,f(r_plot),label=\"V(r)\")\n",
    "plt.plot(r_plot,df(r_plot),label=\"V'(r)\")\n",
    "plt.legend()\n",
    "plt.show()\n",
    "\n",
    "sol = root_scalar(df,x0=1,x1=1.2)\n",
    "print(sol)\n",
    "res = minimize_scalar(f,[0.1,5])\n",
    "print(res)\n",
    "\n",
    "\n",
    "print(\"---\"*30)\n",
    "\n",
    "def mf(x):\n",
    "    return 3*(x[0]-1)**2 + 4*(x[1]-3)**2\n",
    "\n",
    "def jac(x):\n",
    "    return [6*(x[0]-1),8*(x[1]-3)]\n",
    "\n",
    "x0=[1,1]\n",
    "res = minimize(mf,x0,method=\"CG\")\n",
    "print(res)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.4 矩阵"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 2.4.1 矩阵的一般性质\n",
    "\n",
    "大部分数值计算主要的任务其实都是求解线性方程。一组线性方程可写为\n",
    "$$\n",
    "\\begin{aligned}\n",
    "a_{00} x_0+a_{01} x_1+a_{02} x_2+\\cdots+a_{0, N-1} x_{N-1} &=b_0 \\\\\n",
    "a_{10} x_0+a_{11} x_1+a_{12} x_2+\\cdots+a_{1, N-1} x_{N-1} &=b_1 \\\\\n",
    "a_{20} x_0+a_{21} x_1+a_{22} x_2+\\cdots+a_{2, N-1} x_{N-1} &=b_2 \\\\\n",
    "\\cdots & \\cdots \\\\\n",
    "\\cdots & \\cdots \\\\\n",
    "a_{M-1,0} x_0+a_{M-1,1} x_1+\\cdots+a_{M-1, N-1} x_{N-1} &=b_{M-1}.\n",
    "\\end{aligned}\n",
    "$$\n",
    "假设有N个未知数$x_i$和M个方程。如果$N=M$则有可能能找到一组唯一解。而如果$N\\ne M$，事情会变得更有趣。\n",
    "\n",
    "\n",
    "我们可以将上面的方程简写为\n",
    "$$\n",
    "A\\cdot x = b 或 A_{ij} x_j = b_i \n",
    "$$\n",
    "对于$N=M$的情况，矩阵A为方阵。一般情况下应该会有解。然而，如果方程的行或者列是*退化的*(degeneracy)，那么方阵A将会是*奇异的*(singular)。此时方程数学上无解。另外在数值计算中，即使方程并不奇异，求解也可能会失效。\n",
    "\n",
    "有些方程可能非常接近线性相关，以至于机器中的舍入误差使它们在求解过程的某个阶段成为线性相关的。在这种情况下，数值求解将失败，一般会知道失败了。\n",
    "\n",
    "当维度$N$特别大时，误差累积可能会掩盖真正的解。而数值求解过程并不知道求解失败，但是会返回一组错误的解。方程越接近奇异，越可能发生这种情况。当然我们可以对解进行检验，并通过迭代来改进。\n",
    "\n",
    "我们可以对线性方程求解的任务分类如下\n",
    "1. $M=N$。我们可以求解$A\\cdot x=b$,这里b可以是一个列向量，也可以是个矩阵。而如果b为一个单位矩阵时，我们其实可以得到矩阵的逆。\n",
    "2. $M<N$。方程比未知数要少。在这种情况下，可能没有解，或者有多个解向量x。在后一种情况下，解空间由一个特定的解$x_p$加上$N-M$个向量的任何线性组合(矩阵A的零空间)。\n",
    "3. $M>N$。此时方程是超定的(overdetermined)。一般方程无解，但是实际中却经常碰到这种任务。通常情况下，人们会寻求最佳“妥协”解，即最接近同时满足所有方程的解。如果贴近度是在最小二乘意义下定义的，即方程左右两边差的平方和最小，则可以转化为可解的最小二乘问题。原方程可转化为如下N维方程的求解\n",
    "$$\n",
    "\\left(\\mathbf{A}^T \\cdot \\mathbf{A}\\right) \\cdot \\mathbf{x}=\\left(\\mathbf{A}^T \\cdot \\mathbf{b}\\right)\n",
    "$$\n",
    "该方程称为线性最小二乘法问题的方程。奇异值分解与线性最小二乘问题有密切的联系。一般我们不直接求解上面的方程来得到最小二乘解。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 2.4.2 线性方程组的求解"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "##### 高斯消元 \n",
    "\n",
    "\n",
    "高斯消元法主要步骤，对待求的线性方程组$A\\cdot x=b$的系数矩阵A，进行一系列的初等变换，使得系数矩阵变为上三角的形式\n",
    "$$\n",
    "U\\cdot x=c,U=\\left[\\begin{array}{cccc}\n",
    "u_{11} & u_{12} & \\cdots & u_{1n}\\\\\n",
    "0 & u_{22} &  & u_{2n}\\\\\n",
    "\\vdots &  & \\ddots & \\vdots\\\\\n",
    "0 & \\cdots & 0 & u_{nn}\n",
    "\\end{array}\\right]\n",
    "$$\n",
    "如果矩阵A是非奇异的，那么U也一定非奇异，即所有的对角元 $u_{ii}\\ne 0$ ,从而可以用反代法来求解。公式表达为\n",
    "$$\n",
    "x_{i}=\\frac{c_{i}-\\sum_{k=i+1}^{n}u_{ik}x_{k}}{u_{ii}},i=n,n-1,\\cdots,1\n",
    "$$\n",
    "在将矩阵A化为三角矩阵时，可以将A与b合并成一个$n\\times(n+1)$的矩阵。\n",
    "$$\n",
    "(A,b)=\\left[\\begin{array}{cccc}\n",
    "a_{11} & \\cdots & a_{1n} & b_{1}\\\\\n",
    "\\vdots &  & \\vdots & \\vdots\\\\\n",
    "a_{n1} & \\cdots & a_{nn} & b_{n}\n",
    "\\end{array}\\right]\n",
    "$$\n",
    "在消元的过程中，防止对角元为0，需要做一些行交换的操作，该操作可以看成是一个矩阵作用在原矩阵上。\n",
    "设$P^{(1r)}$满足将第一行和第r行进行交换，其矩阵元为\n",
    "$$\n",
    "\\left\\{\n",
    "    \\begin{array}{l}\n",
    "\\left[P^{(1r)}\\right]_{1r}=\\left[P^{(1r)}\\right]_{r1}=1,\\left[P^{(1r)}\\right]_{11}=\\left[P^{(1r)}\\right]_{rr}=0\\\\\n",
    "\\left[P^{(1r)}\\right]_{ij}=\\delta_{ij},(ij)\\neq(1r)\\neq(r1)\n",
    "\\end{array}\n",
    "\\right.\n",
    "$$\n",
    "另外需要进行的操作是将每行的元素进行相消。\n",
    "\n",
    "考虑如下的矩阵(Frobinius矩阵)\n",
    "$$\n",
    "G^{(1)}=\\left[\\begin{array}{cccc}\n",
    "1 & 0 & \\cdots & 0\\\\\n",
    "-l_{21} & 1 & \\cdots & 0\\\\\n",
    "\\vdots & \\vdots & \\ddots & \\vdots\\\\\n",
    "-l_{n1} & 0 & \\cdots & 1\n",
    "\\end{array}\\right]\n",
    "$$\n",
    "该矩阵作用在原矩阵上，当选择合适的 $l_{r1}=\\bar{a}_{r1}/\\bar{a}_{11}$（假设 $\\bar{a}_{11}\\ne 0$ ）的值时，可以使得原矩阵第一列除第一行的元素不变外，其他的都变成0。\n",
    "该矩阵也是非奇异的，且其逆矩阵也为Frobinius矩阵，只是$-l_{r1}$变为$l_{r1}$。\n",
    "经过上面两个变换，总可以将原增广矩阵$(A,b)$变为如下形式\n",
    "$$\n",
    "\\begin{align*}\n",
    "\\left(A^{\\prime},b^{\\prime}\\right) & =\\left(\\begin{array}{ccccc}\n",
    "a_{11}^{\\prime} & a_{12}^{\\prime} & \\cdots & a_{1n}^{\\prime} & b_{1}^{\\prime}\\\\\n",
    "0 & a_{22}^{\\prime} & \\cdots & a_{2n}^{\\prime} & b_{2}^{\\prime}\\\\\n",
    "\\vdots & \\vdots & \\ddots & \\vdots & \\vdots\\\\\n",
    "0 & a_{n2}^{\\prime} & \\cdots & a_{nn}^{\\prime} & b_{n}^{\\prime}\n",
    "\\end{array}\\right),\\\\\n",
    "\\left(A^{\\prime},b^{\\prime}\\right) & =G^{(1)}(\\bar{A},\\bar{b})=G^{(1)}P^{(1r)}(A,b)\n",
    "\\end{align*}\n",
    "$$\n",
    "变换后的增广矩阵使得，变量$x_{1}$仅出现在第一个方程当中。\n",
    "从而通过对剩余的$(n-1)$个变量继续应用上面的两次变换，可以进一步得到只剩下$(n-2)$个变量的增广矩阵。\n",
    "重复该过程，最终使得增广矩阵化为希望的上三角的形式，进一步利用反代公式，得到原方程组的解。\n",
    "\n",
    "在两次变换的第一步变换，其主要目的是防止被除数为0，该被除矩阵元被称为支点元(或主元)。\n",
    "一般我们会通过行交换使得每一步被除的主元为该剩余列的最大元素，该选择称为部分主元选取。\n",
    "另外也可以在每次变换的矩阵中选择最大的元素作为主元，即完全主元选取。\n",
    "将换行的操作记为$P^{(j)}$,则可以用一下公式来表示整个约化过程\n",
    "$$\n",
    "\\left\\{ \\begin{aligned}\\left(A^{(j)},b^{(j)}\\right) & =G^{(j)}P^{(j)}\\left(A^{(j-1)},b^{(j-1)}\\right),\\quad j=1,2,\\cdots,(n-1)\\\\\n",
    "\\left(A^{(n-1)},b^{(n-1)}\\right) & \\equiv(U,c)\n",
    "\\end{aligned}\n",
    "\\right.\n",
    "$$\n",
    "或\n",
    "$$\n",
    "(U,c)=G^{(n-1)}P^{(n-1)}G^{(n-2)}P^{(n-2)}\\cdots G^{(1)}P^{(1)}(A,b)\n",
    "$$\n",
    "高斯消元的计算量：消元过程计算量$2(n-1)n(n+1)/3+n(n-1)$，求解两个三角线性系统还需要$n^{2}$的计算量。总的计算量约为$(2n^{3}/3+2n^{2})$\n",
    "高斯消元可用于求线性方程组、求矩阵行列式、求矩阵的逆。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 2.4.3 奇异值分解\n",
    "\n",
    "对奇异的方程组或矩阵，或者在数值上非常接近奇异,高斯消元法和LU分解不能给出令人满意的结果。奇异值分解技术(Singular Value Decomposition)则能在某种程度上给出该问题的解。SVD也是解决大多数线性最小二乘问题的首选方法。\n",
    "根据线性代数定理，任意$M\\times N$矩阵A可以写成$M\\times N$列正交矩阵U,$N\\times N$具有正元素或零元素(奇异值)的对角矩阵W和$N\\times N$正交矩阵V的转置的乘积。\n",
    "\n",
    "当$N>M$时，\n",
    "$$\n",
    "\\left(\\begin{array}{ll}\n",
    "& \\\\\n",
    "& \\\\\n",
    "\\mathbf{A} \\\\\n",
    "& \\\\\n",
    "&\n",
    "\\end{array}\\right)=\n",
    "\\left(\\begin{array}{ll}\n",
    "& \\\\\n",
    "& \\\\\n",
    "    \\mathbf{U} \\\\ \n",
    "& \\\\\n",
    "&\n",
    "\\end{array}\n",
    "    \\right) \n",
    "\\quad \\cdot\\left(\\begin{array}{llll}\n",
    "w_0 & & & \\\\\n",
    "& w_1 & & \\\\\n",
    "& & \\ldots & \\\\\n",
    "& & \\cdots & \\\\\n",
    "& & & w_{N-1}\n",
    "\\end{array}\\right) \\cdot\\left(\\begin{array}{lll} \n",
    "& \\mathbf{V}^T &\n",
    "\\end{array}\\right)\n",
    "$$\n",
    "\n",
    "当$N<M$时，\n",
    "$$\n",
    "\\left(\\begin{array}{lllll}\n",
    " & & \\mathbf{A} & & \n",
    "\\end{array}\\right)=\n",
    "\\left(\\begin{array}{lllll}\n",
    " & & \\mathbf{U} & & \n",
    "\\end{array}\\right) \\quad \\cdot\\left(\\begin{array}{llll}\n",
    "w_0 & & & \\\\\n",
    "& w_1 & & \\\\\n",
    "& & \\ldots & \\\\\n",
    "& & \\cdots & \\\\\n",
    "& & & w_{N-1}\n",
    "\\end{array}\\right) \\cdot\\left(\\begin{array}{lll} \n",
    "& \\mathbf{V}^T &\n",
    "\\end{array}\\right)\n",
    "$$\n",
    "\n",
    "其中V矩阵满足列正交\n",
    "$$\n",
    "\\begin{array}{ll}\n",
    "\\sum_{j=0}^{N-1} V_{j k} V_{j n}=\\delta_{k n} & 0 \\leq k \\leq N-1 \\\\\n",
    "& 0 \\leq n \\leq N-1\n",
    "\\end{array}\n",
    "$$\n",
    "即$V^T\\cdot V = 1$。由于V为方阵，它同样满足行正交，$V\\cdot V^T = 1$。\n",
    "\n",
    "当$M \\ge N$时，U矩阵满足列正交条件\n",
    "$$\n",
    "\\begin{array}{ll}\n",
    "\\sum_{i=0}^{M-1} U_{i k} U_{i n}=\\delta_{k n} & 0 \\leq k \\leq N-1 \\\\\n",
    "0 \\leq n \\leq N-1\n",
    "\\end{array}\n",
    "$$\n",
    "即$U^T \\cdot U = 1$。然而当$M < N $时，$w_j =0, j=M,...,N-1$。 U相应的列也都为零。\n",
    "\n",
    "所有的矩阵都可以进行SVD分解。而分解形式也是几乎唯一的。区别在于可以将这些矩阵的列进行重排，同时奇异值也重排。因此一般选择按奇异值进行降序排列。矩阵的那些非零的奇异值实际上是矩阵$A^{\\dagger}A$的本征值的根号:$\\sigma_{i}(A)=\\sqrt{\\lambda_{i}\\left(A^{\\dagger}A\\right)}$。由于$A^{\\dagger}A$以及$AA^{\\dagger}$都是厄米的，因此矩阵U的列被称为矩阵A的左奇异矢量;而矩阵V的列则称为A的右奇异矢量。\n",
    "\n",
    "对于有奇异的方阵A，其零空间维度不为0，即方阵A的秩小于$N$。则方程$A\\cdot x = b$，对大多数b没有解，而一些b则存在多个解。此时通常的求解方法失效。而SVD显式地构造了矩阵的零空间和值域的标准正交基!具体来说，U中对应相同编号的元素$w_j$不为零的列，是张成值域的基向量的标准正交集合;V中对应相同编号的元素$w_j$为零的列是零空间的正交基。\n",
    "\n",
    "下面我们主要关注$N=M$的情况。此时A做SVD分解得到的U和V都是方阵。由于U和V都是正交矩阵，因此可以直接得到A的逆矩阵\n",
    "$$\n",
    "\\mathbf{A}^{-1}=\\mathbf{V} \\cdot\\left[\\operatorname{diag}\\left(1 / w_j\\right)\\right] \\cdot \\mathbf{U}^T\n",
    "$$\n",
    "如果某个$w_j$零，或者很小，以至于完全被舍入误差所支配，则矩阵A是奇异的。因此奇异值分解首先提供了对A性质的一个判断。形式上，矩阵的条件数定义为$w_j$中最大值与最小值之比。如果一个矩阵的条件数是无限的，它就是奇异的;如果它的条件数太大，它就是病态的，也就是说，如果它的倒数接近机器的浮点精度(例如，double类型的值小于大约$10^-15$)。\n",
    "\n",
    "现在我们看一下在A是奇异的情况下求解线性方程组。对于齐次方程组$b=0$，可以立即通过SVD求解。解决方案是上述零空间方法返回的列的任何线性组合。\n",
    "当右边的向量b不为0时，重要的问题是它是否在A的值域内。如果是，那么奇异方程组确实有解x;事实上，它有不止一个解，因为零空间中的任何向量($w_j=0$对应的V的任何列)都可以以任何线性组合与x相加。如果我们想从这些解中挑选出一个，比如具有最小的模的解。那么我们只需要将$w_j=0$的$1/w_j$设为零，然后求解下面的等式\n",
    "$$\n",
    "\\mathbf{x}=\\mathbf{V} \\cdot\\left[\\operatorname{diag}\\left(1 / w_j\\right)\\right] \\cdot\\left(\\mathbf{U}^T \\cdot \\mathbf{b}\\right)\n",
    "$$\n",
    "这将是长度最小的解向量。\n",
    "Proof:\n",
    "$W^-1$为修正过的W的逆矩阵。因为\n",
    "$$\n",
    "\\begin{aligned}\n",
    "\\left|\\mathbf{x}+\\mathbf{x}^{\\prime}\\right| &=\\left|\\mathbf{V} \\cdot \\mathbf{W}^{-1} \\cdot \\mathbf{U}^T \\cdot \\mathbf{b}+\\mathbf{x}^{\\prime}\\right| \\\\\n",
    "&=\\left|\\mathbf{V} \\cdot\\left(\\mathbf{W}^{-1} \\cdot \\mathbf{U}^T \\cdot \\mathbf{b}+\\mathbf{V}^T \\cdot \\mathbf{x}^{\\prime}\\right)\\right| \\\\\n",
    "&=\\left|\\mathbf{W}^{-1} \\cdot \\mathbf{U}^T \\cdot \\mathbf{b}+\\mathbf{V}^T \\cdot \\mathbf{x}^{\\prime}\\right|\n",
    "\\end{aligned}\n",
    "$$\n",
    "第一项只有当$w_i \\ne 0$时有不为零的i分量，第二项只有当$w_i=0$时，i分量才不为零。\n",
    "\n",
    "如果b不在A的值域内，则方程无解。但是我们仍然可以用上面的公式得到一个解x。这个解并不真正满足$A\\cdot x =b $。但是它在最小二乘的意义上最接近。即该解满足\n",
    "$$\n",
    "\\mathbf{x} \\quad \\text { which minimizes } r \\equiv|\\mathbf{A} \\cdot \\mathbf{x}-\\mathbf{b}|\n",
    "$$\n",
    "这里的r称为解的残差。\n",
    "Proof\n",
    "$$\n",
    "\\begin{aligned}\n",
    "\\left|\\mathbf{A} \\cdot \\mathbf{x}-\\mathbf{b}+\\mathbf{b}^{\\prime}\\right| &=\\left|\\left(\\mathbf{U} \\cdot \\mathbf{W} \\cdot \\mathbf{V}^T\\right) \\cdot\\left(\\mathbf{V} \\cdot \\mathbf{W}^{-1} \\cdot \\mathbf{U}^T \\cdot \\mathbf{b}\\right)-\\mathbf{b}+\\mathbf{b}^{\\prime}\\right| \\\\\n",
    "&=\\left|\\left(\\mathbf{U} \\cdot \\mathbf{W} \\cdot \\mathbf{W}^{-1} \\cdot \\mathbf{U}^T-1\\right) \\cdot \\mathbf{b}+\\mathbf{b}^{\\prime}\\right| \\\\\n",
    "&=\\left|\\mathbf{U} \\cdot\\left[\\left(\\mathbf{W} \\cdot \\mathbf{W}^{-1}-1\\right) \\cdot \\mathbf{U}^T \\cdot \\mathbf{b}+\\mathbf{U}^T \\cdot \\mathbf{b}^{\\prime}\\right]\\right| \\\\\n",
    "&=\\left|\\left(\\mathbf{W} \\cdot \\mathbf{W}^{-1}-1\\right) \\cdot \\mathbf{U}^T \\cdot \\mathbf{b}+\\mathbf{U}^T \\cdot \\mathbf{b}^{\\prime}\\right|\n",
    "\\end{aligned}\n",
    "$$\n",
    "第一项当$w_j=0$时才有不为零的i分量。第二项当$w_j \\ne 0$时，有不为零的j分量。\n",
    "\n",
    "因此对矩阵A做变换后的$A^{-1}$有着重要意义。如果$w_j$不为零，则可以求解一个非奇异的线性方程组。如果某些$w_j$为零，且将它们的倒数也设为零，则给出一个“最佳”解，要么是多个$w_j$中长度最短的解，要么是在没有精确解的情况下残差最小的解。该方式的逆称为Moore-Penrose逆或A的伪逆。(numpy.linalg.pinv())\n",
    "\n",
    "最后，如果一个矩阵A并不是奇异的，但是又非常接近奇异。即其奇异值不为零，但是非常小。通过直接的求解方法如LU分解法，可能可以得到一个解。但是该解可能具有非常大的分量，将其乘以A矩阵后，由于代数相消，与b的差别较大。而通过SVD方法，将这些$w_j$设为0，则可以得到更好的解。这似乎是自相矛盾的，因为将奇异值归零对应于丢掉我们试图求解的方程组的一个线性组合。这个悖论的解决方案是，我们正在精确地抛弃一组方程，这些方程被舍入误差破坏得如此严重，以至于至多是无用的;通常情况下，它比无用更糟糕，因为它将解向量沿着几乎为零空间向量的某个方向“拉”到无穷远。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 2.4.4 本征系统的求解\n",
    "\n",
    "##### 概念\n",
    "如果$N\\times N$维的矩阵A满足\n",
    "$$\n",
    "A\\cdot x = \\lambda x \\tag{1}\n",
    "$$\n",
    "则称矩阵A具有本征值$\\lambda$,并有对应的本征矢量$x$。\n",
    "\n",
    "上式可以转化为\n",
    "$$\n",
    "det|A-\\lambda 1| = 0\n",
    "$$\n",
    "这是一个关于$\\lambda$的N次多项式，因此总有N个根。重根给出相等的本征值称为**简并的**（degenerate）。\n",
    "直接对上式进行求根并不是求解本征值的好办法。\n",
    "\n",
    "如果我们在公式1的两边加上$\\tau x$，本征值也对应加上$\\tau$。本征向量不会因为这个平移而改变。后面将看到，平移是许多计算特征值算法的重要组成部分。另外特征值为零没有特别的意义。任何特征值都可以移到零，或者任何零特征值都可以从零移开。\n",
    "\n",
    "一些定义\n",
    "* 对称矩阵 $A=A^T$\n",
    "* 厄米矩阵 $A = A^\\dagger$\n",
    "* 正交矩阵 $A^{-1} = A^T$\n",
    "* 幺正矩阵 $A^{-1} = A^\\dagger$\n",
    "* 正规矩阵 $A\\cdot A^\\dagger = A^\\dagger \\cdot A$\n",
    "\n",
    "厄米矩阵的特征值都是实数。实对称矩阵的特征值也都是实的。相反，实非对称矩阵的特征值可以包含实值，也可以包含复共轭值对;非厄米矩阵的复矩阵的本征值通常也是复的。\n",
    "\n",
    "**正规**(normal)的概念与特征向量有关。具有非简并(即不同)特征值的正规矩阵的特征向量是完备的和正交的，张成N维向量空间。对于具有简并特征值的正规矩阵，还具有额外的自由，可以用它们自身的线性组合来替换对应于简并特征值的特征向量。利用这种自由度，我们总是可以执行Gram-Schmidt正交化，并找到一组完全正交的特征向量，就像非简并的情况下一样。如果矩阵的列是一个标准正交的特征向量集合，那么这个矩阵显然是幺正的。实对称矩阵的特征向量构成的矩阵是正交的，因为其特征向量都是实数。\n",
    "\n",
    "当一个矩阵不是正规的，例如任意随机的、非对称的实数矩阵，那么对该矩阵通常找不到任何正交的特征向量集，甚至找不到任何正交的特征向量对(排除偶然的情况)。N个非正交特征向量并不一定能张成N维向量空间;也就是说，这些特征向量并不总是完备的。这样的矩阵被称为有**缺陷的**或亏损的(defective)。\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "##### 矩阵对角化\n",
    "\n",
    "公式（1）中，矩阵A右乘矢量x，满足本征方程。因此x又称为A矩阵的右本征矢量。另外也可以定义左本征矢量\n",
    "$$\n",
    "x\\cdot A = \\lambda x\n",
    "$$\n",
    "任何一个左矢量都可以看成是$A^T$的右矢量。而左右本征值都是相同的。\n",
    "\n",
    "设$X_R$为A所有右矢量构成的矩阵，$X_L$为所有左矢量构成的矩阵。则有\n",
    "$$\n",
    "A\\cdot X_R = X_R \\cdot diag(\\lambda_0,...,\\lambda_{N-1}) \\\\\n",
    "X_L \\cdot A = diag(\\lambda_0,...,\\lambda_{N-1}) \\cdot X_L\n",
    "$$\n",
    "将上一式左乘$X_L$，二式右乘$X_R$，两式相减可得\n",
    "$$\n",
    "\\left(\\mathbf{X}_L \\cdot \\mathbf{X}_R\\right) \\cdot \\operatorname{diag}\\left(\\lambda_0 \\ldots \\lambda_{N-1}\\right)=\\operatorname{diag}\\left(\\lambda_0 \\ldots \\lambda_{N-1}\\right) \\cdot\\left(\\mathbf{X}_L \\cdot \\mathbf{X}_R\\right)\n",
    "$$\n",
    "因为与对角元全不相同的对角矩阵可对易的一定是对角矩阵。这说明如果所有本征值都不简并，则其左矢量除了与它对应的右矢量外，和其他右矢量都正交。通过归一化，对非简并的矩阵，其左矢和右矢的点乘可以构成一个单位矩阵。而遇到本征值简并的情形，则可以将相应的左矢或右矢进行重新线性组合，来与对应的右矢或左矢正交。归一化需要除以左矢和右矢的内积。然而如果遇到内积为零，这表明本征矢量是不完备的。不完备的情形只发生在具有简并本征值的情形。而简并也不意味着会不完备(如正规矩阵一定是完备的。)\n",
    "\n",
    "无论对简并或非简并的情形，在做了正交化及归一化的处理后，则有$X_R=X_L^{-1}$，如果$X_L^{-1}$逆存在的话。而这也给出了一个非常有用的因子化形式\n",
    "$$\n",
    "\\mathbf{A}=\\mathbf{X}_R \\cdot \\operatorname{diag}\\left(\\lambda_0 \\ldots \\lambda_{N-1}\\right) \\cdot \\mathbf{X}_L \\quad \\text { and } \\quad \\operatorname{diag}\\left(\\lambda_0 \\ldots \\lambda_{N-1}\\right)=\\mathbf{X}_L \\cdot \\mathbf{A} \\cdot \\mathbf{X}_R\n",
    "$$\n",
    "上式也可以写为\n",
    "$$\n",
    "\\mathbf{X}_R^{-1} \\cdot \\mathbf{A} \\cdot \\mathbf{X}_R=\\operatorname{diag}\\left(\\lambda_0 \\ldots \\lambda_{N-1}\\right) \\tag{2}\n",
    "$$\n",
    "这是关于矩阵A进行**相似变换**的一个特殊情况\n",
    "$$\n",
    "A \\to Z^{-1}\\cdot A \\cdot Z\n",
    "$$\n",
    "Z为相似变换矩阵。相似变换在特征值的计算中起着至关重要的作用，因为它们不会改变矩阵的特征值。而等式2表明，对于一个具有完备本征值的矩阵，总是可以通过相似变换进行对角化。变换矩阵的列为其右本征矢量，而它的逆矩阵的行为左本征矢量。\n",
    "\n",
    "对一个实对称矩阵，他的本征矢量是实的且相互正交。因此他的变换矩阵也是正交矩阵。此时的相似变换也变成了实正交变换\n",
    "$$\n",
    "A \\to Z^T \\cdot A \\cdot Z\n",
    "$$\n",
    "如果是实的非对称的矩阵，假设它有完备的本征矢量，可以进行对角化，而它的变换矩阵也不一定会是实的。然而，对该矩阵进行实的相似变换也几乎可以完成对角化，可以将它化为对角上包含$2\\times 2$块对角的形式。每一个$2 \\times 2$的块对应着复共轭的一对复本征值。\n",
    "\n",
    "大部分的算法都是通过对A进行一系列的相似变换，让其逐步对角化。\n",
    "$$\n",
    "\\mathbf{A} \\quad \\rightarrow \\quad \\mathbf{P}_1^{-1} \\cdot \\mathbf{A} \\cdot \\mathbf{P}_1 \\quad \\rightarrow \\quad \\mathbf{P}_2^{-1} \\cdot \\mathbf{P}_1^{-1} \\cdot \\mathbf{A} \\cdot \\mathbf{P}_1 \\cdot \\mathbf{P}_2 \\\\\n",
    "\\rightarrow \\quad \\mathbf{P}_3^{-1} \\cdot \\mathbf{P}_2^{-1} \\cdot \\mathbf{P}_1^{-1} \\cdot \\mathbf{A} \\cdot \\mathbf{P}_1 \\cdot \\mathbf{P}_2 \\cdot \\mathbf{P}_3 \\quad \\rightarrow \\quad \\text { etc. }\n",
    "$$\n",
    "当A对角化后，本征矢量可以即为变换矩阵的列\n",
    "$$\n",
    "X_R = P_1 \\cdot P_2 \\cdot P_3 ...\n",
    "$$\n",
    "\n",
    "这里一般有两种策略来实现逐步的将A对角化。一种方案是构建一系列的相似变换矩阵$P_i$，可以每次将A的一些特别的非对角元化为零，或特定的行或列化为零(Householder)。通过有限次的这种迭代是没法完全将A对角化。但是这种方法会使得非对角元不断的减小。通过足够多的迭代，使得非对角元小到可以忽略，则完成了相应的对角化。然而这种做法的效率较低。\n",
    "另外一种方案称为因子化方案。假设A可以分解为两个矩阵相乘的形式\n",
    "$$\n",
    "A=F_L \\cdot F_R  或 F_L^{-1} \\cdot A = F_R\n",
    "$$\n",
    "我们将两个矩阵交换相乘，则有\n",
    "$$\n",
    "F_R \\cdot F_L^{-1} = F_L^{-1} \\cdot A \\cdot F_L\n",
    "$$\n",
    "而这正是使用$F_L$来对A进行相似变换。(QR分解)\n",
    "\n",
    "问题的分类:\n",
    "一般的本征问题的需求可以分成以下几类\n",
    "1. 需要求所有的本征值，不需要本征矢量\n",
    "2. 所有的本征值，一些本征矢量(如大的一些本征值对应的本征矢量，具有最大模的本征矢量等)\n",
    "3. 所有的本征值和本征矢量。\n",
    "对不同的需求，有不同的算法。速度和存储上会有较大的区别。\n",
    "\n",
    "另外对于不同类型的矩阵，也有不同的求解方式。\n",
    "* 实对称的三对角型矩阵\n",
    "* 实对称的带状矩阵\n",
    "* 实对称矩阵\n",
    "* 实的非对称矩阵\n",
    "* 复的厄米矩阵\n",
    "* 复的非厄米矩阵\n",
    "针对问题选择合适的程序，可以有效的加快计算速度及减少存储。\n",
    "我们主要介绍实对称矩阵、厄米矩阵及实的非对称矩阵的数值计算方法。\n",
    "\n",
    "另外，广义本征值问题，也可以转化为本征值问题求解，如\n",
    "$$\n",
    "A\\cdot x = \\lambda B\\cdot x\n",
    "$$\n",
    "可以将B进行分解$B = L\\cdot L^T$,从而原方程变为\n",
    "$$\n",
    "(L^{-1} \\cdot A \\cdot (L^{-1})^T) \\cdot (L^T \\cdot x) = \\lambda (L^T \\cdot x)\n",
    "$$\n",
    "\n",
    "最后，这里求解本征值的分解与上面讲解的奇异值分解并不相同。首先奇异值分解并不需要是方阵。对于都是方阵的情形，本征值分解的$X_R,X_L$中，$X_L$的行与$X_R$的列正交，而$X_L$的行与行或列与列之间并无正交关系。奇异值分解中的$U,V$，则它们各自的列是正交的，相互之间并无正交关系。除非A矩阵是对称的或厄米的，此时奇异值和本征值完全等价。要注意奇异值与$A^T A$的本征值有关，而与$A\\cdot A$并无关系。\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "##### QR分解\n",
    "\n",
    "标准的 QR 算法对多数实矩阵都可以很好的工作。\n",
    "但是，如果矩阵有若干个非常接近的实本征值，或者有成对的复本征值时可能会收敛得很慢。\n",
    "一个通常的做法是利用shift 的技术。它实际上等价于将原先的矩阵加上一个正比于单位矩阵的矩阵。\n",
    "标准 QR 算法更改为如下的、具有单一 shift 的 QR 算法：\n",
    "1. for k=1,2,...do\n",
    "2. $T^{(k-1)}$矩阵的shifted-QR分解：\n",
    "$$\n",
    "Q^{(k)}R^{(k)}=T^{(k-1)}-\\mu\\mathbb{1}_{n\\times n}\n",
    "$$ 其中$\\mu\\in\\mathbb{R}$称为该算法的shift。\n",
    "3. 令 $T^{(k)}=R^{(k)}Q^{(k)}+\\mu\\mathbb{1}_{n\\times n}$\n",
    "4. end for \n",
    "\n",
    "应当选择$\\mu\\in\\mathbb{R}$使得\n",
    "$$\n",
    "\\left|\\lambda_{1}-\\mu\\right|\\geq\\left|\\lambda_{2}-\\mu\\right|\\geq\\cdots\\geq\\left|\\lambda_{n}-\\mu\\right|\n",
    "$$\n",
    "则非对角元$t_{j,j-1}^{(k)}$大致按照$|(\\lambda_{j}-\\mu)/(\\lambda_{j-1}-\\mu)^{k}|$的方式趋向于零。一个比较自然的选择是令\n",
    "$$\n",
    "|\\lambda_{n}-\\mu|<|\\lambda_{i}-\\mu|,i=1,...,n-1\n",
    "$$\n",
    "则矩阵元$t_{n,n-1}^{(k)}$会快速地趋向于零。\n",
    "一般会选取$\\mu=t_{n,n}^{(k)}$,并监控$t_{n,n-1}^{(k)}$的大小，如果一旦\n",
    "$$\n",
    "\\left|t_{n,n-1}^{(k)}\\right|\\leq\\varepsilon\\left(\\left|t_{n-1,n-1}^{(k)}\\right|+\\left|t_{n,n}^{(k)}\\right|\\right),k\\geq0\n",
    "$$\n",
    "就可以直接将$t_{n,n-1}^{(k)}$设为零。\n",
    "对于仅仅有实数本征值的实矩阵来说，一般利用 single shift 技术就 可以比较好地解决 QR 迭代的收敛问题。\n",
    "标准的 QR 算法对多数实矩阵都可以很好的工作。\n",
    "但是，如果矩阵有若干个非常接近的实本征值，或者有成对的复本征值时可能会收敛得很慢。\n",
    "一个通常的做法是利用shift 的技术。它实际上等价于将原先的矩阵加上一个正比于单位矩阵的矩阵。\n",
    "标准 QR 算法更改为如下的、具有单一 shift 的 QR 算法：\n",
    "1. for k=1,2,...do\n",
    "2. $T^{(k-1)}$矩阵的shifted-QR分解：\n",
    "$$\n",
    "Q^{(k)}R^{(k)}=T^{(k-1)}-\\mu\\mathbb{1}_{n\\times n}\n",
    "$$ 其中$\\mu\\in\\mathbb{R}$称为该算法的shift。\n",
    "3. 令 $T^{(k)}=R^{(k)}Q^{(k)}+\\mu\\mathbb{1}_{n\\times n}$\n",
    "4. end for \n",
    "应当选择$\\mu\\in\\mathbb{R}$使得\n",
    "$$\n",
    "\\left|\\lambda_{1}-\\mu\\right|\\geq\\left|\\lambda_{2}-\\mu\\right|\\geq\\cdots\\geq\\left|\\lambda_{n}-\\mu\\right|\n",
    "$$\n",
    "则非对角元$t_{j,j-1}^{(k)}$大致按照$|(\\lambda_{j}-\\mu)/(\\lambda_{j-1}-\\mu)^{k}|$的方式趋向于零。一个比较自然的选择是令\n",
    "$$\n",
    "|\\lambda_{n}-\\mu|<|\\lambda_{i}-\\mu|,i=1,...,n-1\n",
    "$$\n",
    "则矩阵元$t_{n,n-1}^{(k)}$会快速地趋向于零。\n",
    "一般会选取$\\mu=t_{n,n}^{(k)}$,并监控$t_{n,n-1}^{(k)}$的大小，如果一旦\n",
    "$$\n",
    "\\left|t_{n,n-1}^{(k)}\\right|\\leq\\varepsilon\\left(\\left|t_{n-1,n-1}^{(k)}\\right|+\\left|t_{n,n}^{(k)}\\right|\\right),k\\geq0\n",
    "$$\n",
    "就可以直接将$t_{n,n-1}^{(k)}$设为零。\n",
    "对于仅仅有实数本征值的实矩阵来说，一般利用 single shift 技术就 可以比较好地解决 QR 迭代的收敛问题。\n",
    "\n",
    "上面介绍的两种方法结合起来，可以方便的处理实对称矩阵。对于厄米矩阵，可以将其转化为实对称矩阵来求解。设$C=A+iB$为一个厄米矩阵，则其本征值问题\n",
    "$$\n",
    "(A+iB)\\cdot (u+iv) = \\lambda (u + i v)\n",
    "$$\n",
    "等价于$2n \\times 2n$的实问题\n",
    "$$\n",
    "\\left[\\begin{array}{cc}\n",
    "\\mathbf{A} & -\\mathbf{B} \\\\\n",
    "\\mathbf{B} & \\mathbf{A}\n",
    "\\end{array}\\right] \\cdot\\left[\\begin{array}{l}\n",
    "\\mathbf{u} \\\\\n",
    "\\mathbf{v}\n",
    "\\end{array}\\right]=\\lambda\\left[\\begin{array}{l}\n",
    "\\mathbf{u} \\\\\n",
    "\\mathbf{v}\n",
    "\\end{array}\\right]\n",
    "$$\n",
    "注意$A=A^T$,$B^T = - B$。\n",
    "\n",
    "而对于非对称的情形，很难有一个完美的处理算法。首先,对于非对称矩阵的本征值，它对矩阵元微小的变化会很敏感。此外，矩阵本身可能是有缺陷的，从而没有完备的本征矢量。而考虑到舍入误差，甚至很难判断一个矩阵是否是有缺陷的。因此，目前的算法通常试图找到一个完整的本征集合，并依赖于用户来检查结果。如果任何特征向量几乎是平行的，那么矩阵很可能是有缺陷的。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "base",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.12"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
